pg_atoi() does range check on int4 data only if
authorBruce Momjian
Thu, 8 Jul 1999 00:27:01 +0000 (00:27 +0000)
committerBruce Momjian
Thu, 8 Jul 1999 00:27:01 +0000 (00:27 +0000)
"HAS_LONG_LONG" is defined based on the assumption that
strtol() would return ERANGE if a platform does not support
64-bit integers. In current PostgreSQL 6.5 (and 6.4.2)
distribution, "HAS_LONG_LONG" is defined only if platform
is "alpha". (See include/port/alpha.h) I think the int4
range check should apply to linux_alpha as well. (I have
not tested yet but I guess this might be applicable to
newer Linux/i386 distributions which includes new GCC which
implements long int as 64-bit int.)

src/backend/utils/adt/numutils.c

index 413d0fadd88db447e5ab87166e2930532a9dd6c0..c2986d467342fd21f91254701bfc5a0e10c8109a 100644 (file)
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/adt/numutils.c,v 1.30 1999/05/25 16:12:14 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/adt/numutils.c,v 1.31 1999/07/08 00:27:01 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -76,7 +76,7 @@ pg_atoi(char *s, int size, int c)
    switch (size)
    {
        case sizeof(int32):
-#ifdef HAS_LONG_LONG
+#if defined(HAVE_LONG_INT_64) || defined(HAVE_LONG_LONG_INT_64)
            /* won't get ERANGE on these with 64-bit longs... */
            if (l < INT_MIN)
            {
@@ -88,7 +88,7 @@ pg_atoi(char *s, int size, int c)
                errno = ERANGE;
                elog(ERROR, "pg_atoi: error reading \"%s\": %m", s);
            }
-#endif  /* HAS_LONG_LONG */
+#endif         /* HAVE_LONG_INT_64 or HAVE_LONG_LONG_INT_64 */
            break;
        case sizeof(int16):
            if (l < SHRT_MIN)