From f858f7045c8b526e89e3bdc1e67524180a5b6b5c Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 10 Dec 2021 07:24:32 +0100 Subject: [PATCH] Remove pg_strtouint64(), use strtoull() directly pg_strtouint64() is a wrapper around strtoull/strtoul/_strtoui64, but it seems no longer necessary to have this indirection. msvc/Solution.pm claims HAVE_STRTOULL, so the "MSVC only" part seems unnecessary. Also, we have code in c.h to substitute alternatives for strtoull() if not found, and that would appear to cover all currently supported platforms, so having a further fallback in pg_strtouint64() seems unnecessary. Therefore, remove pg_strtouint64(), and use strtoull() directly in all call sites. --- src/backend/nodes/readfuncs.c | 2 +- src/backend/utils/adt/numutils.c | 22 ---------------------- src/backend/utils/adt/xid.c | 2 +- src/backend/utils/adt/xid8funcs.c | 6 +++--- src/backend/utils/misc/guc.c | 2 +- src/include/utils/builtins.h | 1 - 6 files changed, 6 insertions(+), 29 deletions(-) diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c index dcec3b728f..0eafae0794 100644 --- a/src/backend/nodes/readfuncs.c +++ b/src/backend/nodes/readfuncs.c @@ -80,7 +80,7 @@ #define READ_UINT64_FIELD(fldname) \ token = pg_strtok(&length); /* skip :fldname */ \ token = pg_strtok(&length); /* get field value */ \ - local_node->fldname = pg_strtouint64(token, NULL, 10) + local_node->fldname = strtoull(token, NULL, 10) /* Read a long integer field (anything written as ":fldname %ld") */ #define READ_LONG_FIELD(fldname) \ diff --git a/src/backend/utils/adt/numutils.c b/src/backend/utils/adt/numutils.c index b93096f288..6a9c00fdd3 100644 --- a/src/backend/utils/adt/numutils.c +++ b/src/backend/utils/adt/numutils.c @@ -606,25 +606,3 @@ pg_ultostr(char *str, uint32 value) return str + len; } - -/* - * pg_strtouint64 - * Converts 'str' into an unsigned 64-bit integer. - * - * This has the identical API to strtoul(3), except that it will handle - * 64-bit ints even where "long" is narrower than that. - * - * For the moment it seems sufficient to assume that the platform has - * such a function somewhere; let's not roll our own. - */ -uint64 -pg_strtouint64(const char *str, char **endptr, int base) -{ -#ifdef _MSC_VER /* MSVC only */ - return _strtoui64(str, endptr, base); -#elif defined(HAVE_STRTOULL) && SIZEOF_LONG < 8 - return strtoull(str, endptr, base); -#else - return strtoul(str, endptr, base); -#endif -} diff --git a/src/backend/utils/adt/xid.c b/src/backend/utils/adt/xid.c index 24c1c93732..02569f61f4 100644 --- a/src/backend/utils/adt/xid.c +++ b/src/backend/utils/adt/xid.c @@ -158,7 +158,7 @@ xid8in(PG_FUNCTION_ARGS) { char *str = PG_GETARG_CSTRING(0); - PG_RETURN_FULLTRANSACTIONID(FullTransactionIdFromU64(pg_strtouint64(str, NULL, 0))); + PG_RETURN_FULLTRANSACTIONID(FullTransactionIdFromU64(strtoull(str, NULL, 0))); } Datum diff --git a/src/backend/utils/adt/xid8funcs.c b/src/backend/utils/adt/xid8funcs.c index f1870a7366..6cf3979c49 100644 --- a/src/backend/utils/adt/xid8funcs.c +++ b/src/backend/utils/adt/xid8funcs.c @@ -295,12 +295,12 @@ parse_snapshot(const char *str) char *endp; StringInfo buf; - xmin = FullTransactionIdFromU64(pg_strtouint64(str, &endp, 10)); + xmin = FullTransactionIdFromU64(strtoull(str, &endp, 10)); if (*endp != ':') goto bad_format; str = endp + 1; - xmax = FullTransactionIdFromU64(pg_strtouint64(str, &endp, 10)); + xmax = FullTransactionIdFromU64(strtoull(str, &endp, 10)); if (*endp != ':') goto bad_format; str = endp + 1; @@ -318,7 +318,7 @@ parse_snapshot(const char *str) while (*str != '\0') { /* read next value */ - val = FullTransactionIdFromU64(pg_strtouint64(str, &endp, 10)); + val = FullTransactionIdFromU64(strtoull(str, &endp, 10)); str = endp; /* require the input to be in order */ diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index ee6a838b3a..9df553fc77 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -12438,7 +12438,7 @@ check_recovery_target_xid(char **newval, void **extra, GucSource source) TransactionId *myextra; errno = 0; - xid = (TransactionId) pg_strtouint64(*newval, NULL, 0); + xid = (TransactionId) strtoull(*newval, NULL, 0); if (errno == EINVAL || errno == ERANGE) return false; diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h index 40fcb0ab6d..b07eefaf1e 100644 --- a/src/include/utils/builtins.h +++ b/src/include/utils/builtins.h @@ -53,7 +53,6 @@ extern int pg_ltoa(int32 l, char *a); extern int pg_lltoa(int64 ll, char *a); extern char *pg_ultostr_zeropad(char *str, uint32 value, int32 minwidth); extern char *pg_ultostr(char *str, uint32 value); -extern uint64 pg_strtouint64(const char *str, char **endptr, int base); /* oid.c */ extern oidvector *buildoidvector(const Oid *oids, int n); -- 2.34.1