diff options
author | Andres Freund | 2017-10-11 23:01:52 +0000 |
---|---|---|
committer | Andres Freund | 2017-10-11 23:01:52 +0000 |
commit | 70c2d1be2b1e1efa8ef38a92b443fa290a9558dd (patch) | |
tree | a7486acecc33cde0982ebc1b97d05e1b1857dad3 /src/backend/lib/stringinfo.c | |
parent | 0b974dba2d6b5581ce422ed883209de46f313fb6 (diff) |
Allow to avoid NUL-byte management for stringinfos and use in format.c.
In a lot of the places having appendBinaryStringInfo() maintain a
trailing NUL byte wasn't actually meaningful, e.g. when appending an
integer which can contain 0 in one of its bytes.
Removing this yields some small speedup, but more importantly will be
more consistent when providing faster variants of pq_sendint etc.
Author: Andres Freund
Discussion: https://postgr.es/m/20170914063418.sckdzgjfrsbekae4@alap3.anarazel.de
Diffstat (limited to 'src/backend/lib/stringinfo.c')
-rw-r--r-- | src/backend/lib/stringinfo.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/backend/lib/stringinfo.c b/src/backend/lib/stringinfo.c index fd155671443..cb2026c3b20 100644 --- a/src/backend/lib/stringinfo.c +++ b/src/backend/lib/stringinfo.c @@ -202,7 +202,7 @@ appendStringInfoSpaces(StringInfo str, int count) * appendBinaryStringInfo * * Append arbitrary binary data to a StringInfo, allocating more space - * if necessary. + * if necessary. Ensures that a trailing null byte is present. */ void appendBinaryStringInfo(StringInfo str, const char *data, int datalen) @@ -225,6 +225,25 @@ appendBinaryStringInfo(StringInfo str, const char *data, int datalen) } /* + * appendBinaryStringInfoNT + * + * Append arbitrary binary data to a StringInfo, allocating more space + * if necessary. Does not ensure a trailing null-byte exists. + */ +void +appendBinaryStringInfoNT(StringInfo str, const char *data, int datalen) +{ + Assert(str != NULL); + + /* Make more room if needed */ + enlargeStringInfo(str, datalen); + + /* OK, append the data */ + memcpy(str->data + str->len, data, datalen); + str->len += datalen; +} + +/* * enlargeStringInfo * * Make sure there is enough space for 'needed' more bytes |