Fix snprintf.c for machines that don't have long long, like some Irix.
authorBruce Momjian <bruce@momjian.us>
Wed, 7 Oct 1998 17:12:52 +0000 (17:12 +0000)
committerBruce Momjian <bruce@momjian.us>
Wed, 7 Oct 1998 17:12:52 +0000 (17:12 +0000)
src/backend/commands/vacuum.c
src/backend/port/snprintf.c

index a39355e195aa5b9fcbdc8e626d845f68ab274338..c422de9867ac01d2de5325bbf0f1be5e75f814af 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.82 1998/09/23 04:22:05 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.83 1998/10/07 17:12:50 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -576,8 +576,8 @@ vc_vacone(Oid relid, bool analyze, List *va_cols)
        heap_close(rel);
 
        /* update statistics in pg_class */
-       vc_updstats(vacrelstats->relid, vacrelstats->num_pages, vacrelstats->num_tuples,
-                               vacrelstats->hasindex, vacrelstats);
+       vc_updstats(vacrelstats->relid, vacrelstats->num_pages,
+                               vacrelstats->num_tuples, vacrelstats->hasindex, vacrelstats);
 
        /* next command frees attribute stats */
 
index f0546692483e7915dce578e462597874d2436024..d54adb4e778922235f4b37bf5b12f6956b8fdea8 100644 (file)
@@ -7,22 +7,22 @@
  * modification, are permitted provided that the following conditions
  * are met:
  * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
+ *       notice, this list of conditions and the following disclaimer.
  * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
  * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
+ *       must display the following acknowledgement:
  *     This product includes software developed by the University of
  *     California, Berkeley and its contributors.
  * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
+ *       may be used to endorse or promote products derived from this software
+ *       without specific prior written permission.
  *
  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * ARE DISCLAIMED.     IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  * SUCH DAMAGE.
  */
 #if 0
-# include "sendmail.h"
-# include "pathnames.h"
+#include "sendmail.h"
+#include "pathnames.h"
 #endif
 
-# include "postgres.h"
+#include "postgres.h"
 
-# include "regex/cdefs.h"
+#include "regex/cdefs.h"
 
-# include <stdarg.h>
-# define VA_LOCAL_DECL  va_list args;
-# define VA_START(f)    va_start(args, f)
-# define VA_END     va_end(args)
+#include <stdarg.h>
+#define VA_LOCAL_DECL  va_list args;
+#define VA_START(f)    va_start(args, f)
+#define VA_END    va_end(args)
 
-# include <sys/ioctl.h>
-# include <sys/param.h>
+#include <sys/ioctl.h>
+#include <sys/param.h>
 
 /* IRIX doesn't do 'long long' in va_arg(), so use a typedef */
+#ifdef HAVE_LONG_INT_64
 typedef long long long_long;
+#endif
 
 /*
-**  SNPRINTF, VSNPRINT -- counted versions of printf
+**     SNPRINTF, VSNPRINT -- counted versions of printf
 **
 **     These versions have been grabbed off the net.  They have been
 **     cleaned up to compile properly and support for .precision and
@@ -63,7 +65,7 @@ typedef long long long_long;
  * Original:
  * Patrick Powell Tue Apr 11 09:48:21 PDT 1995
  * A bombproof version of doprnt (dopr) included.
- * Sigh.  This sort of thing is always nasty do deal with.  Note that
+ * Sigh.  This sort of thing is always nasty do deal with.     Note that
  * the version here does not include floating point...
  *
  * snprintf() is used instead of sprintf() as it does limit checks
@@ -73,21 +75,22 @@ typedef long long long_long;
  * causing nast effects.
  **************************************************************/
 
-/*static char _id[] = "$Id: snprintf.c,v 1.8 1998/10/02 15:38:01 momjian Exp $";*/
+/*static char _id[] = "$Id: snprintf.c,v 1.9 1998/10/07 17:12:52 momjian Exp $";*/
 static char *end;
 static int     SnprfOverflow;
 
-int snprintf(char *str, size_t count, const char *fmt, ...);
-int vsnprintf(char *str, size_t count, const char *fmt, ...);
-static void dopr (char *buffer, const char *format, ... );
+int                    snprintf(char *str, size_t count, const char *fmt,...);
+int                    vsnprintf(char *str, size_t count, const char *fmt,...);
+static void dopr(char *buffer, const char *format,...);
 
 int
-snprintf(char *str, size_t count, const char *fmt, ...)
+snprintf(char *str, size_t count, const char *fmt,...)
 {
-       int len;
+       int                     len;
+
        VA_LOCAL_DECL
 
-       VA_START(fmt);
+               VA_START(fmt);
        len = vsnprintf(str, count, fmt, args);
        VA_END;
        return len;
@@ -95,7 +98,7 @@ snprintf(char *str, size_t count, const char *fmt, ...)
 
 
 int
-vsnprintf(char *str, size_t count, const char *fmt, ...)
+vsnprintf(char *str, size_t count, const char *fmt,...)
 {
        VA_LOCAL_DECL
 
@@ -103,12 +106,12 @@ vsnprintf(char *str, size_t count, const char *fmt, ...)
        str[0] = 0;
        end = str + count - 1;
        SnprfOverflow = 0;
-       dopr( str, fmt, args);
+       dopr(str, fmt, args);
        if (count > 0)
                end[0] = 0;
        if (SnprfOverflow)
                elog(NOTICE, "vsnprintf overflow, len = %d, str = %s",
-                       count, str);
+                        count, str);
        VA_END;
        return strlen(str);
 }
@@ -119,243 +122,307 @@ vsnprintf(char *str, size_t count, const char *fmt, ...)
 
 static void fmtstr __P((char *value, int ljust, int len, int zpad, int maxwidth));
 static void fmtnum __P((long value, int base, int dosign, int ljust, int len, int zpad));
-static void dostr __P(( char * , int ));
+static void dostr __P((char *, int));
 static char *output;
-static void dopr_outch __P(( int c ));
+static void dopr_outch __P((int c));
 
 static void
-dopr (char *buffer, const char *format, ... )
+dopr(char *buffer, const char *format,...)
 {
-       int ch;
-       long value;
-       int longflag  = 0;
-       int longlongflag  = 0;
-       int pointflag = 0;
-       int maxwidth  = 0;
-       char *strvalue;
-       int ljust;
-       int len;
-       int zpad;
+       int                     ch;
+       long            value;
+       int                     longflag = 0;
+       int                     longlongflag = 0;
+       int                     pointflag = 0;
+       int                     maxwidth = 0;
+       char       *strvalue;
+       int                     ljust;
+       int                     len;
+       int                     zpad;
+
        VA_LOCAL_DECL
 
-       VA_START(format);
+               VA_START(format);
 
-       output = buffer;
-       while( (ch = *format++) ){
-               switch( ch ){
-               case '%':
-                       ljust = len = zpad = maxwidth = 0;
-                       longflag = pointflag = 0;
-               nextch:
-                       ch = *format++;
-                       switch( ch ){
-                       case 0:
-                               dostr( "**end of format**" , 0);
-                                                          VA_END;
-                               return;
-                       case '-': ljust = 1; goto nextch;
-                       case '0': /* set zero padding if len not set */
-                               if(len==0 && !pointflag) zpad = '0';
-                       case '1': case '2': case '3':
-                       case '4': case '5': case '6':
-                       case '7': case '8': case '9':
-                              if (pointflag)
-                                maxwidth = maxwidth*10 + ch - '0';
-                              else
-                                len = len*10 + ch - '0';
-                               goto nextch;
-                      case '*': 
-                              if (pointflag)
-                                maxwidth = va_arg( args, int );
-                              else
-                                len = va_arg( args, int );
-                              goto nextch;
-                      case '.': pointflag = 1; goto nextch;
-                       case 'l': if(longflag) {
-                                   longlongflag = 1; goto nextch;
-                                 } else {
-                                   longflag = 1; goto nextch;
-                                 }
-                       case 'u': case 'U':
-                               /*fmtnum(value,base,dosign,ljust,len,zpad) */
-                               if( longflag ){
-                                       value = va_arg( args, long );
-                               } else {
-                                       value = va_arg( args, int );
-                               }
-                               fmtnum( value, 10,0, ljust, len, zpad ); break;
-                       case 'o': case 'O':
-                               /*fmtnum(value,base,dosign,ljust,len,zpad) */
-                               if( longflag ){
-                                       value = va_arg( args, long );
-                               } else {
-                                       value = va_arg( args, int );
-                               }
-                               fmtnum( value, 8,0, ljust, len, zpad ); break;
-                       case 'd': case 'D':
-                               if( longflag ){
-                                 if( longlongflag ) {
-                                       value = va_arg( args, long_long );
-                                 } else {
-                                       value = va_arg( args, long );
-                                 }
-                               } else {
-                                       value = va_arg( args, int );
-                               }
-                               fmtnum( value, 10,1, ljust, len, zpad ); break;
-                       case 'x':
-                               if( longflag ){
-                                       value = va_arg( args, long );
-                               } else {
-                                       value = va_arg( args, int );
-                               }
-                               fmtnum( value, 16,0, ljust, len, zpad ); break;
-                       case 'X':
-                               if( longflag ){
-                                       value = va_arg( args, long );
-                               } else {
-                                       value = va_arg( args, int );
-                               }
-                               fmtnum( value,-16,0, ljust, len, zpad ); break;
-                       case 's':
-                               strvalue = va_arg( args, char *);
-                              if (maxwidth > 0 || !pointflag) {
-                                if (pointflag && len > maxwidth)
-                                  len = maxwidth; /* Adjust padding */
-                                fmtstr( strvalue,ljust,len,zpad, maxwidth);
-                              }
-                              break;
-                       case 'c':
-                               ch = va_arg( args, int );
-                               dopr_outch( ch ); break;
-                       case '%': dopr_outch( ch ); continue;
-                       default:
-                               dostr(  "???????" , 0);
-                       }
-                       break;
-               default:
-                       dopr_outch( ch );
-                       break;
-               }
-       }
-       *output = 0;
-          VA_END;
+       output = buffer;
+       while ((ch = *format++))
+       {
+               switch (ch)
+               {
+                       case '%':
+                               ljust = len = zpad = maxwidth = 0;
+                               longflag = pointflag = 0;
+               nextch:
+                               ch = *format++;
+                               switch (ch)
+                               {
+                                       case 0:
+                                               dostr("**end of format**", 0);
+                                               VA_END;
+                                               return;
+                                       case '-':
+                                               ljust = 1;
+                                               goto nextch;
+                                       case '0':       /* set zero padding if len not set */
+                                               if (len == 0 && !pointflag)
+                                                       zpad = '0';
+                                       case '1':
+                                       case '2':
+                                       case '3':
+                                       case '4':
+                                       case '5':
+                                       case '6':
+                                       case '7':
+                                       case '8':
+                                       case '9':
+                                               if (pointflag)
+                                                       maxwidth = maxwidth * 10 + ch - '0';
+                                               else
+                                                       len = len * 10 + ch - '0';
+                                               goto nextch;
+                                       case '*':
+                                               if (pointflag)
+                                                       maxwidth = va_arg(args, int);
+                                               else
+                                                       len = va_arg(args, int);
+                                               goto nextch;
+                                       case '.':
+                                               pointflag = 1;
+                                               goto nextch;
+                                       case 'l':
+                                               if (longflag)
+                                               {
+                                                       longlongflag = 1;
+                                                       goto nextch;
+                                               }
+                                               else
+                                               {
+                                                       longflag = 1;
+                                                       goto nextch;
+                                               }
+                                       case 'u':
+                                       case 'U':
+                                               /* fmtnum(value,base,dosign,ljust,len,zpad) */
+                                               if (longflag)
+                                                       value = va_arg(args, long);
+                                               else
+                                                       value = va_arg(args, int);
+                                               fmtnum(value, 10, 0, ljust, len, zpad);
+                                               break;
+                                       case 'o':
+                                       case 'O':
+                                               /* fmtnum(value,base,dosign,ljust,len,zpad) */
+                                               if (longflag)
+                                                       value = va_arg(args, long);
+                                               else
+                                                       value = va_arg(args, int);
+                                               fmtnum(value, 8, 0, ljust, len, zpad);
+                                               break;
+                                       case 'd':
+                                       case 'D':
+                                               if (longflag)
+                                               {
+#ifdef HAVE_LONG_INT_64
+                                                       if (longlongflag)
+                                                               value = va_arg(args, long_long);
+                                                       else
+#endif
+                                                               value = va_arg(args, long);
+                                               }
+                                               else
+                                                       value = va_arg(args, int);
+                                               fmtnum(value, 10, 1, ljust, len, zpad);
+                                               break;
+                                       case 'x':
+                                               if (longflag)
+                                                       value = va_arg(args, long);
+                                               else
+                                                       value = va_arg(args, int);
+                                               fmtnum(value, 16, 0, ljust, len, zpad);
+                                               break;
+                                       case 'X':
+                                               if (longflag)
+                                                       value = va_arg(args, long);
+                                               else
+                                                       value = va_arg(args, int);
+                                               fmtnum(value, -16, 0, ljust, len, zpad);
+                                               break;
+                                       case 's':
+                                               strvalue = va_arg(args, char *);
+                                               if (maxwidth > 0 || !pointflag)
+                                               {
+                                                       if (pointflag && len > maxwidth)
+                                                               len = maxwidth; /* Adjust padding */
+                                                       fmtstr(strvalue, ljust, len, zpad, maxwidth);
+                                               }
+                                               break;
+                                       case 'c':
+                                               ch = va_arg(args, int);
+                                               dopr_outch(ch);
+                                               break;
+                                       case '%':
+                                               dopr_outch(ch);
+                                               continue;
+                                       default:
+                                               dostr("???????", 0);
+                               }
+                               break;
+                       default:
+                               dopr_outch(ch);
+                               break;
+               }
+       }
+       *output = 0;
+       VA_END;
 }
 
 static void
-fmtstr(  value, ljust, len, zpad, maxwidth )
-       char *value;
-       int ljust, len, zpad, maxwidth;
+fmtstr(value, ljust, len, zpad, maxwidth)
+char      *value;
+int                    ljust,
+                       len,
+                       zpad,
+                       maxwidth;
 {
-       int padlen, strlen;     /* amount to pad */
+       int                     padlen,
+                               strlen;                 /* amount to pad */
 
-       if( value == 0 ){
-               value = "<NULL>";
-       }
-       for( strlen = 0; value[strlen]; ++ strlen ); /* strlen */
-       if (strlen > maxwidth && maxwidth)
-        strlen = maxwidth;
-       padlen = len - strlen;
-       if( padlen < 0 ) padlen = 0;
-       if( ljust ) padlen = -padlen;
-       while( padlen > 0 ) {
-               dopr_outch( ' ' );
-               --padlen;
-       }
-       dostr( value, maxwidth );
-       while( padlen < 0 ) {
-               dopr_outch( ' ' );
-               ++padlen;
-       }
+       if (value == 0)
+               value = "<NULL>";
+       for (strlen = 0; value[strlen]; ++strlen);      /* strlen */
+       if (strlen > maxwidth && maxwidth)
+               strlen = maxwidth;
+       padlen = len - strlen;
+       if (padlen < 0)
+               padlen = 0;
+       if (ljust)
+               padlen = -padlen;
+       while (padlen > 0)
+       {
+               dopr_outch(' ');
+               --padlen;
+       }
+       dostr(value, maxwidth);
+       while (padlen < 0)
+       {
+               dopr_outch(' ');
+               ++padlen;
+       }
 }
 
 static void
-fmtnum(  value, base, dosign, ljust, len, zpad )
-       long value;
-       int base, dosign, ljust, len, zpad;
+fmtnum(value, base, dosign, ljust, len, zpad)
+long           value;
+int                    base,
+                       dosign,
+                       ljust,
+                       len,
+                       zpad;
 {
-       int signvalue = 0;
-       unsigned long uvalue;
-       char convert[20];
-       int place = 0;
-       int padlen = 0; /* amount to pad */
-       int caps = 0;
+       int                     signvalue = 0;
+       unsigned long uvalue;
+       char            convert[20];
+       int                     place = 0;
+       int                     padlen = 0;             /* amount to pad */
+       int                     caps = 0;
+
+       /*
+        * DEBUGP(("value 0x%x, base %d, dosign %d, ljust %d, len %d, zpad
+        * %d\n", value, base, dosign, ljust, len, zpad ));
+        */
+       uvalue = value;
+       if (dosign)
+       {
+               if (value < 0)
+               {
+                       signvalue = '-';
+                       uvalue = -value;
+               }
+       }
+       if (base < 0)
+       {
+               caps = 1;
+               base = -base;
+       }
+       do
+       {
+               convert[place++] =
+                       (caps ? "0123456789ABCDEF" : "0123456789abcdef")
+                       [uvalue % (unsigned) base];
+               uvalue = (uvalue / (unsigned) base);
+       } while (uvalue);
+       convert[place] = 0;
+       padlen = len - place;
+       if (padlen < 0)
+               padlen = 0;
+       if (ljust)
+               padlen = -padlen;
 
-       /* DEBUGP(("value 0x%x, base %d, dosign %d, ljust %d, len %d, zpad %d\n",
-               value, base, dosign, ljust, len, zpad )); */
-       uvalue = value;
-       if( dosign ){
-               if( value < 0 ) {
-                       signvalue = '-';
-                       uvalue = -value;
-               }
-       }
-       if( base < 0 ){
-               caps = 1;
-               base = -base;
-       }
-       do{
-               convert[place++] =
-                       (caps? "0123456789ABCDEF":"0123456789abcdef")
-                        [uvalue % (unsigned)base  ];
-               uvalue = (uvalue / (unsigned)base );
-       }while(uvalue);
-       convert[place] = 0;
-       padlen = len - place;
-       if( padlen < 0 ) padlen = 0;
-       if( ljust ) padlen = -padlen;
-       /* DEBUGP(( "str '%s', place %d, sign %c, padlen %d\n",
-               convert,place,signvalue,padlen)); */
-       if( zpad && padlen > 0 ){
-               if( signvalue ){
-                       dopr_outch( signvalue );
-                       --padlen;
-                       signvalue = 0;
-               }
-               while( padlen > 0 ){
-                       dopr_outch( zpad );
-                       --padlen;
-               }
-       }
-       while( padlen > 0 ) {
-               dopr_outch( ' ' );
-               --padlen;
-       }
-       if( signvalue ) dopr_outch( signvalue );
-       while( place > 0 ) dopr_outch( convert[--place] );
-       while( padlen < 0 ){
-               dopr_outch( ' ' );
-               ++padlen;
-       }
+       /*
+        * DEBUGP(( "str '%s', place %d, sign %c, padlen %d\n",
+        * convert,place,signvalue,padlen));
+        */
+       if (zpad && padlen > 0)
+       {
+               if (signvalue)
+               {
+                       dopr_outch(signvalue);
+                       --padlen;
+                       signvalue = 0;
+               }
+               while (padlen > 0)
+               {
+                       dopr_outch(zpad);
+                       --padlen;
+               }
+       }
+       while (padlen > 0)
+       {
+               dopr_outch(' ');
+               --padlen;
+       }
+       if (signvalue)
+               dopr_outch(signvalue);
+       while (place > 0)
+               dopr_outch(convert[--place]);
+       while (padlen < 0)
+       {
+               dopr_outch(' ');
+               ++padlen;
+       }
 }
 
 static void
-dostr( str , cut)
-     char *str;
-     int cut;
+dostr(str, cut)
+char      *str;
+int                    cut;
 {
-  if (cut) {
-    while(*str && cut-- > 0) dopr_outch(*str++);
-  } else {
-    while(*str) dopr_outch(*str++);
-  }
+       if (cut)
+       {
+               while (*str && cut-- > 0)
+                       dopr_outch(*str++);
+       }
+       else
+       {
+               while (*str)
+                       dopr_outch(*str++);
+       }
 }
 
 static void
-dopr_outch( c )
-       int c;
+dopr_outch(c)
+int                    c;
 {
 #if 0
-       if( iscntrl(c) && c != '\n' && c != '\t' ){
-               c = '@' + (c & 0x1F);
-               if( end == 0 || output < end )
-                       *output++ = '^';
-       }
+       if (iscntrl(c) && c != '\n' && c != '\t')
+       {
+               c = '@' + (c & 0x1F);
+               if (end == 0 || output < end)
+                       *output++ = '^';
+       }
 #endif
-       if( end == 0 || output < end )
-               *output++ = c;
-       else
+       if (end == 0 || output < end)
+               *output++ = c;
+       else
                SnprfOverflow++;
 }
-
-