aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/numutils.c
diff options
context:
space:
mode:
authorDavid Rowley <drowley@postgresql.org>2020-06-13 12:32:00 +1200
committerDavid Rowley <drowley@postgresql.org>2020-06-13 12:32:00 +1200
commitdad75eb4a8d5835ecc795d7a7978e7702e4d5912 (patch)
tree8d0f2778f3c6f60e1343b585818d408d18881f14 /src/backend/utils/adt/numutils.c
parent9a7fccd9eac85726ced3f3794a743eeab447f334 (diff)
downloadpostgresql-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/numutils.c')
-rw-r--r--src/backend/utils/adt/numutils.c32
1 files changed, 19 insertions, 13 deletions
diff --git a/src/backend/utils/adt/numutils.c b/src/backend/utils/adt/numutils.c
index a9d3fbf758f..412ae361d2c 100644
--- a/src/backend/utils/adt/numutils.c
+++ b/src/backend/utils/adt/numutils.c
@@ -327,16 +327,17 @@ invalid_syntax:
/*
* pg_itoa: converts a signed 16-bit integer to its string representation
+ * and returns strlen(a).
*
* Caller must ensure that 'a' points to enough memory to hold the result
* (at least 7 bytes, counting a leading sign and trailing NUL).
*
* It doesn't seem worth implementing this separately.
*/
-void
+int
pg_itoa(int16 i, char *a)
{
- pg_ltoa((int32) i, a);
+ return pg_ltoa((int32) i, a);
}
/*
@@ -404,25 +405,27 @@ pg_ultoa_n(uint32 value, char *a)
}
/*
- * NUL-terminate the output of pg_ultoa_n.
+ * pg_ltoa: converts a signed 32-bit integer to its string representation and
+ * returns strlen(a).
*
* It is the caller's responsibility to ensure that a is at least 12 bytes long,
* which is enough room to hold a minus sign, a maximally long int32, and the
* above terminating NUL.
*/
-void
+int
pg_ltoa(int32 value, char *a)
{
uint32 uvalue = (uint32) value;
- int len;
+ int len = 0;
if (value < 0)
{
uvalue = (uint32) 0 - uvalue;
- *a++ = '-';
+ a[len++] = '-';
}
- len = pg_ultoa_n(uvalue, a);
+ len += pg_ultoa_n(uvalue, a + len);
a[len] = '\0';
+ return len;
}
/*
@@ -510,24 +513,27 @@ pg_ulltoa_n(uint64 value, char *a)
}
/*
- * pg_lltoa: convert a signed 64-bit integer to its string representation
+ * pg_lltoa: converts a signed 64-bit integer to its string representation and
+ * returns strlen(a).
*
* Caller must ensure that 'a' points to enough memory to hold the result
* (at least MAXINT8LEN + 1 bytes, counting a leading sign and trailing NUL).
*/
-void
+int
pg_lltoa(int64 value, char *a)
{
- int len;
uint64 uvalue = value;
+ int len = 0;
if (value < 0)
{
- *a++ = '-';
uvalue = (uint64) 0 - uvalue;
+ a[len++] = '-';
}
- len = pg_ulltoa_n(uvalue, a);
- a[len] = 0;
+
+ len += pg_ulltoa_n(uvalue, a + len);
+ a[len] = '\0';
+ return len;
}