]> granicus.if.org Git - postgresql/commitdiff
Synced pgc.l with scan.l.
authorMichael Meskes <meskes@postgresql.org>
Mon, 2 Apr 2001 08:17:24 +0000 (08:17 +0000)
committerMichael Meskes <meskes@postgresql.org>
Mon, 2 Apr 2001 08:17:24 +0000 (08:17 +0000)
src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/preproc/pgc.l

index 4d8f038ce26af298d4b10d66b6bb1eca97715a3b..41c07a43ecdf86333f535a21c67852f16bb37d6c 100644 (file)
@@ -1060,8 +1060,12 @@ Mon Feb 26 15:22:04 CET 2001
 
        - Fixed misplaced variables FoundInto and QueryIsRule.
 
-Don Mar 29 10:23:05 CEST 2001
+Thu Mar 29 10:23:05 CEST 2001
 
        - Applied bug fix in ecpgtype.h by Adriaan Joubert.
+
+Mon Apr  2 10:16:10 CEST 2001
+
+       - Synced scan.l and pgc.l.
        - Set ecpg version to 2.8.0. 
        - Set library version to 3.2.0.
index e8896e3cc60f4c1977339413232d6779a73777cc..6c05ccf32e5aa94cf84294dcb05516f1e4d47749 100644 (file)
@@ -12,7 +12,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.77 2001/02/21 18:53:47 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.78 2001/04/02 08:17:24 meskes Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -335,13 +335,20 @@ cppline                   {space}*#(.*\\{line_end})*.*
                                        startlit();
                                }
 <xh>{xhstop}                   {
+                                       long val;
                                        char* endptr;
 
                                        BEGIN(SQL);
                                        errno = 0;
-                                       yylval.ival = strtol(literalbuf, &endptr, 16);
-                                       if (*endptr != '\0' || errno == ERANGE)
+                                       val = strtol(literalbuf, &endptr, 16);
+                                       if (*endptr != '\0' || errno == ERANGE
+#ifdef HAVE_LONG_INT_64  
+                                               /* if long > 32 bits, check for overflow of int4 */
+                                               || val != (long) ((int32) val)
+#endif
+                                               )
                                                mmerror(ET_ERROR, "Bad hexadecimal integer input");
+                                       yylval.ival = val;
                                        return ICONST;
                                }
 
@@ -498,16 +505,23 @@ cppline                   {space}*#(.*\\{line_end})*.*
                                        return PARAM;
                                }
 <C,SQL>{integer}               {
+                                       long val;
                                        char* endptr;
 
                                        errno = 0;
-                                       yylval.ival = strtol((char *)yytext, &endptr,10);
-                                       if (*endptr != '\0' || errno == ERANGE)
+                                       val = strtol((char *)yytext, &endptr,10);
+                                       if (*endptr != '\0' || errno == ERANGE
+#ifdef HAVE_LONG_INT_64  
+                                               /* if long > 32 bits, check for overflow of int4 */
+                                               || val != (long) ((int32) val)
+#endif
+                                               )
                                        {
                                                errno = 0;
                                                yylval.str = mm_strdup((char*)yytext);
                                                return FCONST;
                                        }
+                                       yylval.ival = val;
                                        return ICONST;
                                }
 <SQL>{ip}                      {