From a56c77066e750ca9d7afcf1f16679d8dcd9af06f Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 19 Dec 2022 07:01:27 +0100 Subject: [PATCH v2 2/2] Change argument of appendBinaryStringInfo from char * to void * There is some code that uses this function to assemble some kind of packed binary layout, which requires a bunch of casts because of this. Functions taking binary data plus length should take void * instead, like memcpy() for example. Discussion: https://www.postgresql.org/message-id/flat/a0086cfc-ff0f-2827-20fe-52b591d2666c%40enterprisedb.com --- src/backend/utils/adt/jsonpath.c | 18 +++++++++--------- src/backend/utils/adt/xid8funcs.c | 4 ++-- src/common/stringinfo.c | 4 ++-- src/include/lib/stringinfo.h | 4 ++-- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/backend/utils/adt/jsonpath.c b/src/backend/utils/adt/jsonpath.c index a39eab9c20..acc8fd97f1 100644 --- a/src/backend/utils/adt/jsonpath.c +++ b/src/backend/utils/adt/jsonpath.c @@ -258,18 +258,18 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item, case jpiString: case jpiVariable: case jpiKey: - appendBinaryStringInfo(buf, (char *) &item->value.string.len, + appendBinaryStringInfo(buf, &item->value.string.len, sizeof(item->value.string.len)); appendBinaryStringInfo(buf, item->value.string.val, item->value.string.len); appendStringInfoChar(buf, '\0'); break; case jpiNumeric: - appendBinaryStringInfo(buf, (char *) item->value.numeric, + appendBinaryStringInfo(buf, item->value.numeric, VARSIZE(item->value.numeric)); break; case jpiBool: - appendBinaryStringInfo(buf, (char *) &item->value.boolean, + appendBinaryStringInfo(buf, &item->value.boolean, sizeof(item->value.boolean)); break; case jpiAnd: @@ -313,11 +313,11 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item, int32 offs; appendBinaryStringInfo(buf, - (char *) &item->value.like_regex.flags, + &item->value.like_regex.flags, sizeof(item->value.like_regex.flags)); offs = reserveSpaceForItemPointer(buf); appendBinaryStringInfo(buf, - (char *) &item->value.like_regex.patternlen, + &item->value.like_regex.patternlen, sizeof(item->value.like_regex.patternlen)); appendBinaryStringInfo(buf, item->value.like_regex.pattern, item->value.like_regex.patternlen); @@ -373,7 +373,7 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item, int offset; int i; - appendBinaryStringInfo(buf, (char *) &nelems, sizeof(nelems)); + appendBinaryStringInfo(buf, &nelems, sizeof(nelems)); offset = buf->len; @@ -404,10 +404,10 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item, break; case jpiAny: appendBinaryStringInfo(buf, - (char *) &item->value.anybounds.first, + &item->value.anybounds.first, sizeof(item->value.anybounds.first)); appendBinaryStringInfo(buf, - (char *) &item->value.anybounds.last, + &item->value.anybounds.last, sizeof(item->value.anybounds.last)); break; case jpiType: @@ -464,7 +464,7 @@ reserveSpaceForItemPointer(StringInfo buf) int32 pos = buf->len; int32 ptr = 0; - appendBinaryStringInfo(buf, (char *) &ptr, sizeof(ptr)); + appendBinaryStringInfo(buf, &ptr, sizeof(ptr)); return pos; } diff --git a/src/backend/utils/adt/xid8funcs.c b/src/backend/utils/adt/xid8funcs.c index 3baf5f7d90..15d4db4b70 100644 --- a/src/backend/utils/adt/xid8funcs.c +++ b/src/backend/utils/adt/xid8funcs.c @@ -260,7 +260,7 @@ buf_init(FullTransactionId xmin, FullTransactionId xmax) snap.nxip = 0; buf = makeStringInfo(); - appendBinaryStringInfo(buf, (char *) &snap, PG_SNAPSHOT_SIZE(0)); + appendBinaryStringInfo(buf, &snap, PG_SNAPSHOT_SIZE(0)); return buf; } @@ -272,7 +272,7 @@ buf_add_txid(StringInfo buf, FullTransactionId fxid) /* do this before possible realloc */ snap->nxip++; - appendBinaryStringInfo(buf, (char *) &fxid, sizeof(fxid)); + appendBinaryStringInfo(buf, &fxid, sizeof(fxid)); } static pg_snapshot * diff --git a/src/common/stringinfo.c b/src/common/stringinfo.c index 76ff4d3e24..66a64180c9 100644 --- a/src/common/stringinfo.c +++ b/src/common/stringinfo.c @@ -224,7 +224,7 @@ appendStringInfoSpaces(StringInfo str, int count) * if necessary. Ensures that a trailing null byte is present. */ void -appendBinaryStringInfo(StringInfo str, const char *data, int datalen) +appendBinaryStringInfo(StringInfo str, const void *data, int datalen) { Assert(str != NULL); @@ -250,7 +250,7 @@ appendBinaryStringInfo(StringInfo str, const char *data, int datalen) * if necessary. Does not ensure a trailing null-byte exists. */ void -appendBinaryStringInfoNT(StringInfo str, const char *data, int datalen) +appendBinaryStringInfoNT(StringInfo str, const void *data, int datalen) { Assert(str != NULL); diff --git a/src/include/lib/stringinfo.h b/src/include/lib/stringinfo.h index 9b755c4883..63ea1eca63 100644 --- a/src/include/lib/stringinfo.h +++ b/src/include/lib/stringinfo.h @@ -142,7 +142,7 @@ extern void appendStringInfoSpaces(StringInfo str, int count); * if necessary. */ extern void appendBinaryStringInfo(StringInfo str, - const char *data, int datalen); + const void *data, int datalen); /*------------------------ * appendBinaryStringInfoNT @@ -150,7 +150,7 @@ extern void appendBinaryStringInfo(StringInfo str, * if necessary. Does not ensure a trailing null-byte exists. */ extern void appendBinaryStringInfoNT(StringInfo str, - const char *data, int datalen); + const void *data, int datalen); /*------------------------ * enlargeStringInfo -- 2.39.0