diff options
author | David Rowley <drowley@postgresql.org> | 2020-06-13 12:32:00 +1200 |
---|---|---|
committer | David Rowley <drowley@postgresql.org> | 2020-06-13 12:32:00 +1200 |
commit | dad75eb4a8d5835ecc795d7a7978e7702e4d5912 (patch) | |
tree | 8d0f2778f3c6f60e1343b585818d408d18881f14 /src/backend/utils/adt/int8.c | |
parent | 9a7fccd9eac85726ced3f3794a743eeab447f334 (diff) | |
download | postgresql-dad75eb4a8d5835ecc795d7a7978e7702e4d5912.tar.gz postgresql-dad75eb4a8d5835ecc795d7a7978e7702e4d5912.zip |
Have pg_itoa, pg_ltoa and pg_lltoa return the length of the string
Core by no means makes excessive use of these functions, but quite a large
number of those usages do require the caller to call strlen() on the
returned string. This is quite wasteful since these functions do already
have a good idea of the length of the string, so we might as well just
have them return that.
Reviewed-by: Andrew Gierth
Discussion: https://postgr.es/m/CAApHDvrm2A5x2uHYxsqriO2cUaGcFvND%2BksC9e7Tjep0t2RK_A%40mail.gmail.com
Diffstat (limited to 'src/backend/utils/adt/int8.c')
-rw-r--r-- | src/backend/utils/adt/int8.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/backend/utils/adt/int8.c b/src/backend/utils/adt/int8.c index abba8f1df04..005f68d8539 100644 --- a/src/backend/utils/adt/int8.c +++ b/src/backend/utils/adt/int8.c @@ -149,9 +149,16 @@ int8out(PG_FUNCTION_ARGS) int64 val = PG_GETARG_INT64(0); char buf[MAXINT8LEN + 1]; char *result; + int len; - pg_lltoa(val, buf); - result = pstrdup(buf); + len = pg_lltoa(val, buf) + 1; + + /* + * Since the length is already known, we do a manual palloc() and memcpy() + * to avoid the strlen() call that would otherwise be done in pstrdup(). + */ + result = palloc(len); + memcpy(result, buf, len); PG_RETURN_CSTRING(result); } |