Be more careful about the difference between signed and unsigned ints.
authorTom Lane
Sat, 30 Dec 2000 19:17:47 +0000 (19:17 +0000)
committerTom Lane
Sat, 30 Dec 2000 19:17:47 +0000 (19:17 +0000)
Bug is revealed by OID regress test on 64-bit platforms.

src/backend/port/snprintf.c

index dc85c3f681e736f0792f04d8de72f9a366b1227b..6cf45ca99202182ba0453938b999d8d9c84db66d 100644 (file)
@@ -74,7 +74,7 @@ typedef unsigned long ulong_long;
  * causing nast effects.
  **************************************************************/
 
-/*static char _id[] = "$Id: snprintf.c,v 1.28 2000/12/03 20:45:34 tgl Exp $";*/
+/*static char _id[] = "$Id: snprintf.c,v 1.29 2000/12/30 19:17:47 tgl Exp $";*/
 static char *end;
 static int SnprfOverflow;
 
@@ -192,12 +192,12 @@ dopr(char *buffer, const char *format, va_list args)
                        if (longflag)
                        {
                            if (longlongflag)
-                               value = va_arg(args, long_long);
+                               value = va_arg(args, ulong_long);
                            else
-                               value = va_arg(args, long);
+                               value = va_arg(args, unsigned long);
                        }
                        else
-                           value = va_arg(args, int);
+                           value = va_arg(args, unsigned int);
                        fmtnum(value, 10, 0, ljust, len, zpad);
                        break;
                    case 'o':
@@ -206,12 +206,12 @@ dopr(char *buffer, const char *format, va_list args)
                        if (longflag)
                        {
                            if (longlongflag)
-                               value = va_arg(args, long_long);
+                               value = va_arg(args, ulong_long);
                            else
-                               value = va_arg(args, long);
+                               value = va_arg(args, unsigned long);
                        }
                        else
-                           value = va_arg(args, int);
+                           value = va_arg(args, unsigned int);
                        fmtnum(value, 8, 0, ljust, len, zpad);
                        break;
                    case 'd':
@@ -225,31 +225,30 @@ dopr(char *buffer, const char *format, va_list args)
                        }
                        else
                            value = va_arg(args, int);
-
                        fmtnum(value, 10, 1, ljust, len, zpad);
                        break;
                    case 'x':
                        if (longflag)
                        {
                            if (longlongflag)
-                               value = va_arg(args, long_long);
+                               value = va_arg(args, ulong_long);
                            else
-                               value = va_arg(args, long);
+                               value = va_arg(args, unsigned long);
                        }
                        else
-                           value = va_arg(args, int);
+                           value = va_arg(args, unsigned int);
                        fmtnum(value, 16, 0, ljust, len, zpad);
                        break;
                    case 'X':
                        if (longflag)
                        {
                            if (longlongflag)
-                               value = va_arg(args, long_long);
+                               value = va_arg(args, ulong_long);
                            else
-                               value = va_arg(args, long);
+                               value = va_arg(args, unsigned long);
                        }
                        else
-                           value = va_arg(args, int);
+                           value = va_arg(args, unsigned int);
                        fmtnum(value, -16, 0, ljust, len, zpad);
                        break;
                    case 's':