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 ffa225277e17c3baab9117e3b73b480f796c9246..994e30b51a3386e4747e947a524ecdeb89a6debb 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;
 }