mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
backend libpq void * argument for binary data
Change some backend libpq functions to take void * for binary data instead of char *. This removes the need for numerous casts. Reviewed-by: Dagfinn Ilmari Mannsåker <ilmari@ilmari.org> Discussion: https://www.postgresql.org/message-id/flat/fd1fcedb-3492-4fc8-9e3e-74b97f2db6c7%40eisentraut.org
This commit is contained in:
@ -144,7 +144,7 @@ static int socket_flush_if_writable(void);
|
|||||||
static bool socket_is_send_pending(void);
|
static bool socket_is_send_pending(void);
|
||||||
static int socket_putmessage(char msgtype, const char *s, size_t len);
|
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 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 inline int internal_flush(void);
|
||||||
static pg_noinline int internal_flush_buffer(const char *buf, size_t *start,
|
static pg_noinline int internal_flush_buffer(const char *buf, size_t *start,
|
||||||
size_t *end);
|
size_t *end);
|
||||||
@ -1060,8 +1060,9 @@ pq_getbyte_if_available(unsigned char *c)
|
|||||||
* --------------------------------
|
* --------------------------------
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
pq_getbytes(char *s, size_t len)
|
pq_getbytes(void *b, size_t len)
|
||||||
{
|
{
|
||||||
|
char *s = b;
|
||||||
size_t amount;
|
size_t amount;
|
||||||
|
|
||||||
Assert(PqCommReadingMsg);
|
Assert(PqCommReadingMsg);
|
||||||
@ -1209,7 +1210,7 @@ pq_getmessage(StringInfo s, int maxlen)
|
|||||||
resetStringInfo(s);
|
resetStringInfo(s);
|
||||||
|
|
||||||
/* Read message length word */
|
/* Read message length word */
|
||||||
if (pq_getbytes((char *) &len, 4) == EOF)
|
if (pq_getbytes(&len, 4) == EOF)
|
||||||
{
|
{
|
||||||
ereport(COMMERROR,
|
ereport(COMMERROR,
|
||||||
(errcode(ERRCODE_PROTOCOL_VIOLATION),
|
(errcode(ERRCODE_PROTOCOL_VIOLATION),
|
||||||
@ -1274,8 +1275,10 @@ pq_getmessage(StringInfo s, int maxlen)
|
|||||||
|
|
||||||
|
|
||||||
static inline int
|
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)
|
while (len > 0)
|
||||||
{
|
{
|
||||||
/* If buffer is full, then flush it out */
|
/* If buffer is full, then flush it out */
|
||||||
@ -1499,7 +1502,7 @@ socket_putmessage(char msgtype, const char *s, size_t len)
|
|||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
n32 = pg_hton32((uint32) (len + 4));
|
n32 = pg_hton32((uint32) (len + 4));
|
||||||
if (internal_putbytes((char *) &n32, 4))
|
if (internal_putbytes(&n32, 4))
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
if (internal_putbytes(s, len))
|
if (internal_putbytes(s, len))
|
||||||
|
@ -422,15 +422,15 @@ pq_getmsgint(StringInfo msg, int b)
|
|||||||
switch (b)
|
switch (b)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
pq_copymsgbytes(msg, (char *) &n8, 1);
|
pq_copymsgbytes(msg, &n8, 1);
|
||||||
result = n8;
|
result = n8;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
pq_copymsgbytes(msg, (char *) &n16, 2);
|
pq_copymsgbytes(msg, &n16, 2);
|
||||||
result = pg_ntoh16(n16);
|
result = pg_ntoh16(n16);
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
pq_copymsgbytes(msg, (char *) &n32, 4);
|
pq_copymsgbytes(msg, &n32, 4);
|
||||||
result = pg_ntoh32(n32);
|
result = pg_ntoh32(n32);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -454,7 +454,7 @@ pq_getmsgint64(StringInfo msg)
|
|||||||
{
|
{
|
||||||
uint64 n64;
|
uint64 n64;
|
||||||
|
|
||||||
pq_copymsgbytes(msg, (char *) &n64, sizeof(n64));
|
pq_copymsgbytes(msg, &n64, sizeof(n64));
|
||||||
|
|
||||||
return pg_ntoh64(n64);
|
return pg_ntoh64(n64);
|
||||||
}
|
}
|
||||||
@ -525,7 +525,7 @@ pq_getmsgbytes(StringInfo msg, int datalen)
|
|||||||
* --------------------------------
|
* --------------------------------
|
||||||
*/
|
*/
|
||||||
void
|
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))
|
if (datalen < 0 || datalen > (msg->len - msg->cursor))
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
|
@ -480,7 +480,7 @@ ProcessStartupPacket(Port *port, bool ssl_done, bool gss_done)
|
|||||||
* sound inefficient, but it's not really, because of buffering in
|
* sound inefficient, but it's not really, because of buffering in
|
||||||
* pqcomm.c.)
|
* 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;
|
* If we get no data at all, don't clutter the log with a complaint;
|
||||||
|
@ -361,7 +361,7 @@ bit_recv(PG_FUNCTION_ARGS)
|
|||||||
SET_VARSIZE(result, len);
|
SET_VARSIZE(result, len);
|
||||||
VARBITLEN(result) = bitlen;
|
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 */
|
/* Make sure last byte is correctly zero-padded */
|
||||||
VARBIT_PAD(result);
|
VARBIT_PAD(result);
|
||||||
@ -666,7 +666,7 @@ varbit_recv(PG_FUNCTION_ARGS)
|
|||||||
SET_VARSIZE(result, len);
|
SET_VARSIZE(result, len);
|
||||||
VARBITLEN(result) = bitlen;
|
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 */
|
/* Make sure last byte is correctly zero-padded */
|
||||||
VARBIT_PAD(result);
|
VARBIT_PAD(result);
|
||||||
|
@ -71,7 +71,7 @@ extern int AcceptConnection(pgsocket server_fd, ClientSocket *client_sock);
|
|||||||
extern void TouchSocketFiles(void);
|
extern void TouchSocketFiles(void);
|
||||||
extern void RemoveSocketFiles(void);
|
extern void RemoveSocketFiles(void);
|
||||||
extern Port *pq_init(ClientSocket *client_sock);
|
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_startmsgread(void);
|
||||||
extern void pq_endmsgread(void);
|
extern void pq_endmsgread(void);
|
||||||
extern bool pq_is_reading_msg(void);
|
extern bool pq_is_reading_msg(void);
|
||||||
|
@ -200,7 +200,7 @@ extern int64 pq_getmsgint64(StringInfo msg);
|
|||||||
extern float4 pq_getmsgfloat4(StringInfo msg);
|
extern float4 pq_getmsgfloat4(StringInfo msg);
|
||||||
extern float8 pq_getmsgfloat8(StringInfo msg);
|
extern float8 pq_getmsgfloat8(StringInfo msg);
|
||||||
extern const char *pq_getmsgbytes(StringInfo msg, int datalen);
|
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 char *pq_getmsgtext(StringInfo msg, int rawbytes, int *nbytes);
|
||||||
extern const char *pq_getmsgstring(StringInfo msg);
|
extern const char *pq_getmsgstring(StringInfo msg);
|
||||||
extern const char *pq_getmsgrawstring(StringInfo msg);
|
extern const char *pq_getmsgrawstring(StringInfo msg);
|
||||||
|
Reference in New Issue
Block a user