aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/int.c
diff options
context:
space:
mode:
authorPeter Eisentraut <peter@eisentraut.org>2022-02-14 21:29:45 +0100
committerPeter Eisentraut <peter@eisentraut.org>2022-02-15 07:44:26 +0100
commit73508475d69e90f98ebd9b7e1a5933a26a49c5e9 (patch)
tree300bd958bf6367993e5ebbe59ec8ba104325ea69 /src/backend/utils/adt/int.c
parent278cdea6b9d2993d1a819fbb28262236a72f6d02 (diff)
downloadpostgresql-73508475d69e90f98ebd9b7e1a5933a26a49c5e9.tar.gz
postgresql-73508475d69e90f98ebd9b7e1a5933a26a49c5e9.zip
Remove pg_atoi()
The last caller was int2vectorin(), and having such a general function for one user didn't seem useful, so just put the required parts inline and remove the function. Reviewed-by: John Naylor <john.naylor@enterprisedb.com> Discussion: https://www.postgresql.org/message-id/flat/b239564c-cad0-b23e-c57e-166d883cb97d@enterprisedb.com
Diffstat (limited to 'src/backend/utils/adt/int.c')
-rw-r--r--src/backend/utils/adt/int.c32
1 files changed, 28 insertions, 4 deletions
diff --git a/src/backend/utils/adt/int.c b/src/backend/utils/adt/int.c
index 8bd234c11c6..42ddae99ef4 100644
--- a/src/backend/utils/adt/int.c
+++ b/src/backend/utils/adt/int.c
@@ -146,15 +146,39 @@ int2vectorin(PG_FUNCTION_ARGS)
result = (int2vector *) palloc0(Int2VectorSize(FUNC_MAX_ARGS));
- for (n = 0; *intString && n < FUNC_MAX_ARGS; n++)
+ for (n = 0; n < FUNC_MAX_ARGS; n++)
{
+ long l;
+ char *endp;
+
while (*intString && isspace((unsigned char) *intString))
intString++;
if (*intString == '\0')
break;
- result->values[n] = pg_atoi(intString, sizeof(int16), ' ');
- while (*intString && !isspace((unsigned char) *intString))
- intString++;
+
+ errno = 0;
+ l = strtol(intString, &endp, 10);
+
+ if (intString == endp)
+ ereport(ERROR,
+ (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
+ errmsg("invalid input syntax for type %s: \"%s\"",
+ "smallint", intString)));
+
+ if (errno == ERANGE || l < SHRT_MIN || l > SHRT_MAX)
+ ereport(ERROR,
+ (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
+ errmsg("value \"%s\" is out of range for type %s", intString,
+ "smallint")));
+
+ if (*endp && *endp != ' ')
+ ereport(ERROR,
+ (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
+ errmsg("invalid input syntax for type %s: \"%s\"",
+ "integer", intString)));
+
+ result->values[n] = l;
+ intString = endp;
}
while (*intString && isspace((unsigned char) *intString))
intString++;