static bool socket_is_send_pending(void);
static int socket_putmessage(char msgtype, const char *s, size_t len);
static void socket_putmessage_noblock(char msgtype, const char *s, size_t len);
-static inline int internal_putbytes(const char *s, size_t len);
+static inline int internal_putbytes(const void *b, size_t len);
static inline int internal_flush(void);
static pg_noinline int internal_flush_buffer(const char *buf, size_t *start,
size_t *end);
* --------------------------------
*/
int
-pq_getbytes(char *s, size_t len)
+pq_getbytes(void *b, size_t len)
{
+ char *s = b;
size_t amount;
Assert(PqCommReadingMsg);
resetStringInfo(s);
/* Read message length word */
- if (pq_getbytes((char *) &len, 4) == EOF)
+ if (pq_getbytes(&len, 4) == EOF)
{
ereport(COMMERROR,
(errcode(ERRCODE_PROTOCOL_VIOLATION),
static inline int
-internal_putbytes(const char *s, size_t len)
+internal_putbytes(const void *b, size_t len)
{
+ const char *s = b;
+
while (len > 0)
{
/* If buffer is full, then flush it out */
goto fail;
n32 = pg_hton32((uint32) (len + 4));
- if (internal_putbytes((char *) &n32, 4))
+ if (internal_putbytes(&n32, 4))
goto fail;
if (internal_putbytes(s, len))
switch (b)
{
case 1:
- pq_copymsgbytes(msg, (char *) &n8, 1);
+ pq_copymsgbytes(msg, &n8, 1);
result = n8;
break;
case 2:
- pq_copymsgbytes(msg, (char *) &n16, 2);
+ pq_copymsgbytes(msg, &n16, 2);
result = pg_ntoh16(n16);
break;
case 4:
- pq_copymsgbytes(msg, (char *) &n32, 4);
+ pq_copymsgbytes(msg, &n32, 4);
result = pg_ntoh32(n32);
break;
default:
{
uint64 n64;
- pq_copymsgbytes(msg, (char *) &n64, sizeof(n64));
+ pq_copymsgbytes(msg, &n64, sizeof(n64));
return pg_ntoh64(n64);
}
* --------------------------------
*/
void
-pq_copymsgbytes(StringInfo msg, char *buf, int datalen)
+pq_copymsgbytes(StringInfo msg, void *buf, int datalen)
{
if (datalen < 0 || datalen > (msg->len - msg->cursor))
ereport(ERROR,
* sound inefficient, but it's not really, because of buffering in
* pqcomm.c.)
*/
- if (pq_getbytes((char *) &len, 1) == EOF)
+ if (pq_getbytes(&len, 1) == EOF)
{
/*
* If we get no data at all, don't clutter the log with a complaint;
SET_VARSIZE(result, len);
VARBITLEN(result) = bitlen;
- pq_copymsgbytes(buf, (char *) VARBITS(result), VARBITBYTES(result));
+ pq_copymsgbytes(buf, VARBITS(result), VARBITBYTES(result));
/* Make sure last byte is correctly zero-padded */
VARBIT_PAD(result);
SET_VARSIZE(result, len);
VARBITLEN(result) = bitlen;
- pq_copymsgbytes(buf, (char *) VARBITS(result), VARBITBYTES(result));
+ pq_copymsgbytes(buf, VARBITS(result), VARBITBYTES(result));
/* Make sure last byte is correctly zero-padded */
VARBIT_PAD(result);
extern void TouchSocketFiles(void);
extern void RemoveSocketFiles(void);
extern Port *pq_init(ClientSocket *client_sock);
-extern int pq_getbytes(char *s, size_t len);
+extern int pq_getbytes(void *b, size_t len);
extern void pq_startmsgread(void);
extern void pq_endmsgread(void);
extern bool pq_is_reading_msg(void);
extern float4 pq_getmsgfloat4(StringInfo msg);
extern float8 pq_getmsgfloat8(StringInfo msg);
extern const char *pq_getmsgbytes(StringInfo msg, int datalen);
-extern void pq_copymsgbytes(StringInfo msg, char *buf, int datalen);
+extern void pq_copymsgbytes(StringInfo msg, void *buf, int datalen);
extern char *pq_getmsgtext(StringInfo msg, int rawbytes, int *nbytes);
extern const char *pq_getmsgstring(StringInfo msg);
extern const char *pq_getmsgrawstring(StringInfo msg);