Change argument of appendBinaryStringInfo from char * to void *
authorPeter Eisentraut <peter@eisentraut.org>
Fri, 30 Dec 2022 09:59:25 +0000 (10:59 +0100)
committerPeter Eisentraut <peter@eisentraut.org>
Fri, 30 Dec 2022 10:05:09 +0000 (11:05 +0100)
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
src/backend/utils/adt/xid8funcs.c
src/common/stringinfo.c
src/include/lib/stringinfo.h

index f37d60f6935b3194b60d930c80a64b2aaaf6dcb8..0b412315147d24c6b24d2c249e1074d859aa65b7 100644 (file)
@@ -267,18 +267,18 @@ flattenJsonPathParseItem(StringInfo buf,  int *result, struct Node *escontext,
        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:
@@ -328,11 +328,11 @@ flattenJsonPathParseItem(StringInfo buf,  int *result, struct Node *escontext,
                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);
@@ -393,7 +393,7 @@ flattenJsonPathParseItem(StringInfo buf,  int *result, struct Node *escontext,
                int         offset;
                int         i;
 
-               appendBinaryStringInfo(buf, (char *) &nelems, sizeof(nelems));
+               appendBinaryStringInfo(buf, &nelems, sizeof(nelems));
 
                offset = buf->len;
 
@@ -431,10 +431,10 @@ flattenJsonPathParseItem(StringInfo buf,  int *result, struct Node *escontext,
            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:
@@ -496,7 +496,7 @@ reserveSpaceForItemPointer(StringInfo buf)
    int32       pos = buf->len;
    int32       ptr = 0;
 
-   appendBinaryStringInfo(buf, (char *) &ptr, sizeof(ptr));
+   appendBinaryStringInfo(buf, &ptr, sizeof(ptr));
 
    return pos;
 }
index 3baf5f7d903969429d32b374720d655f0773a166..15d4db4b700faed8148550e1ee0171e2253b4b9a 100644 (file)
@@ -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 *
index 76ff4d3e2452ef29795e5fe46332598aa93b62aa..66a64180c960c227bed484cfa7f3b983248ffc6b 100644 (file)
@@ -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);
 
index 9b755c48831a56ce1dd99250989b68232729a583..63ea1eca6304e88aa86451dee2e2b7b7173d00e2 100644 (file)
@@ -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