Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit7350847

Browse files
committed
Remove pg_atoi()
The last caller was int2vectorin(), and having such a general functionfor one user didn't seem useful, so just put the required parts inlineand 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
1 parent278cdea commit7350847

File tree

3 files changed

+28
-93
lines changed

3 files changed

+28
-93
lines changed

‎src/backend/utils/adt/int.c

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,15 +146,39 @@ int2vectorin(PG_FUNCTION_ARGS)
146146

147147
result= (int2vector*)palloc0(Int2VectorSize(FUNC_MAX_ARGS));
148148

149-
for (n=0;*intString&&n<FUNC_MAX_ARGS;n++)
149+
for (n=0;n<FUNC_MAX_ARGS;n++)
150150
{
151+
longl;
152+
char*endp;
153+
151154
while (*intString&&isspace((unsignedchar)*intString))
152155
intString++;
153156
if (*intString=='\0')
154157
break;
155-
result->values[n]=pg_atoi(intString,sizeof(int16),' ');
156-
while (*intString&& !isspace((unsignedchar)*intString))
157-
intString++;
158+
159+
errno=0;
160+
l=strtol(intString,&endp,10);
161+
162+
if (intString==endp)
163+
ereport(ERROR,
164+
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
165+
errmsg("invalid input syntax for type %s: \"%s\"",
166+
"smallint",intString)));
167+
168+
if (errno==ERANGE||l<SHRT_MIN||l>SHRT_MAX)
169+
ereport(ERROR,
170+
(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
171+
errmsg("value \"%s\" is out of range for type %s",intString,
172+
"smallint")));
173+
174+
if (*endp&&*endp!=' ')
175+
ereport(ERROR,
176+
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
177+
errmsg("invalid input syntax for type %s: \"%s\"",
178+
"integer",intString)));
179+
180+
result->values[n]=l;
181+
intString=endp;
158182
}
159183
while (*intString&&isspace((unsignedchar)*intString))
160184
intString++;

‎src/backend/utils/adt/numutils.c

Lines changed: 0 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -85,94 +85,6 @@ decimalLength64(const uint64 v)
8585
returnt+ (v >=PowersOfTen[t]);
8686
}
8787

88-
/*
89-
* pg_atoi: convert string to integer
90-
*
91-
* allows any number of leading or trailing whitespace characters.
92-
*
93-
* 'size' is the sizeof() the desired integral result (1, 2, or 4 bytes).
94-
*
95-
* c, if not 0, is a terminator character that may appear after the
96-
* integer (plus whitespace). If 0, the string must end after the integer.
97-
*
98-
* Unlike plain atoi(), this will throw ereport() upon bad input format or
99-
* overflow.
100-
*/
101-
int32
102-
pg_atoi(constchar*s,intsize,intc)
103-
{
104-
longl;
105-
char*badp;
106-
107-
/*
108-
* Some versions of strtol treat the empty string as an error, but some
109-
* seem not to. Make an explicit test to be sure we catch it.
110-
*/
111-
if (s==NULL)
112-
elog(ERROR,"NULL pointer");
113-
if (*s==0)
114-
ereport(ERROR,
115-
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
116-
errmsg("invalid input syntax for type %s: \"%s\"",
117-
"integer",s)));
118-
119-
errno=0;
120-
l=strtol(s,&badp,10);
121-
122-
/* We made no progress parsing the string, so bail out */
123-
if (s==badp)
124-
ereport(ERROR,
125-
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
126-
errmsg("invalid input syntax for type %s: \"%s\"",
127-
"integer",s)));
128-
129-
switch (size)
130-
{
131-
casesizeof(int32):
132-
if (errno==ERANGE
133-
#if defined(HAVE_LONG_INT_64)
134-
/* won't get ERANGE on these with 64-bit longs... */
135-
||l<INT_MIN||l>INT_MAX
136-
#endif
137-
)
138-
ereport(ERROR,
139-
(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
140-
errmsg("value \"%s\" is out of range for type %s",s,
141-
"integer")));
142-
break;
143-
casesizeof(int16):
144-
if (errno==ERANGE||l<SHRT_MIN||l>SHRT_MAX)
145-
ereport(ERROR,
146-
(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
147-
errmsg("value \"%s\" is out of range for type %s",s,
148-
"smallint")));
149-
break;
150-
casesizeof(int8):
151-
if (errno==ERANGE||l<SCHAR_MIN||l>SCHAR_MAX)
152-
ereport(ERROR,
153-
(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
154-
errmsg("value \"%s\" is out of range for 8-bit integer",s)));
155-
break;
156-
default:
157-
elog(ERROR,"unsupported result size: %d",size);
158-
}
159-
160-
/*
161-
* Skip any trailing whitespace; if anything but whitespace remains before
162-
* the terminating character, bail out
163-
*/
164-
while (*badp&&*badp!=c&&isspace((unsignedchar)*badp))
165-
badp++;
166-
167-
if (*badp&&*badp!=c)
168-
ereport(ERROR,
169-
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
170-
errmsg("invalid input syntax for type %s: \"%s\"",
171-
"integer",s)));
172-
173-
return (int32)l;
174-
}
175-
17688
/*
17789
* Convert input string to a signed 16 bit integer.
17890
*

‎src/include/utils/builtins.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ extern void namestrcpy(Name name, const char *str);
4343
externintnamestrcmp(Namename,constchar*str);
4444

4545
/* numutils.c */
46-
externint32pg_atoi(constchar*s,intsize,intc);
4746
externint16pg_strtoint16(constchar*s);
4847
externint32pg_strtoint32(constchar*s);
4948
externint64pg_strtoint64(constchar*s);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp