OSDN Git Service

Rearrange code in pg_atoi() to avoid assuming that isspace() cannot
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 30 Nov 2005 23:10:08 +0000 (23:10 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 30 Nov 2005 23:10:08 +0000 (23:10 +0000)
change errno.  No reported bugs here, but why take a chance?

src/backend/utils/adt/numutils.c

index ffa2252..994e30b 100644 (file)
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/adt/numutils.c,v 1.69 2005/10/15 02:49:29 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/adt/numutils.c,v 1.70 2005/11/30 23:10:08 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
 #include "postgres.h"
 
-#include <errno.h>
 #include <math.h>
 #include <limits.h>
 #include <ctype.h>
@@ -84,19 +83,6 @@ pg_atoi(char *s, int size, int c)
                                 errmsg("invalid input syntax for integer: \"%s\"",
                                                s)));
 
-       /*
-        * Skip any trailing whitespace; if anything but whitespace remains before
-        * the terminating character, bail out
-        */
-       while (*badp && *badp != c && isspace((unsigned char) *badp))
-               badp++;
-
-       if (*badp && *badp != c)
-               ereport(ERROR,
-                               (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
-                                errmsg("invalid input syntax for integer: \"%s\"",
-                                               s)));
-
        switch (size)
        {
                case sizeof(int32):
@@ -125,6 +111,20 @@ pg_atoi(char *s, int size, int c)
                default:
                        elog(ERROR, "unsupported result size: %d", size);
        }
+
+       /*
+        * Skip any trailing whitespace; if anything but whitespace remains before
+        * the terminating character, bail out
+        */
+       while (*badp && *badp != c && isspace((unsigned char) *badp))
+               badp++;
+
+       if (*badp && *badp != c)
+               ereport(ERROR,
+                               (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
+                                errmsg("invalid input syntax for integer: \"%s\"",
+                                               s)));
+
        return (int32) l;
 }