Fix snprintf.c for machines that don't have long long, like some Irix.
authorBruce Momjian
Wed, 7 Oct 1998 17:12:52 +0000 (17:12 +0000)
committerBruce Momjian
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 
-# define VA_LOCAL_DECL  va_list args;
-# define VA_START(f)    va_start(args, f)
-# define VA_END     va_end(args)
+#include 
+#define VA_LOCAL_DECL  va_list args;
+#define VA_START(f)    va_start(args, f)
+#define VA_END    va_end(args)
 
-# include 
-# include 
+#include 
+#include 
 
 /* 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 = "";
-       }
-       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 = "";
+   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++;
 }
-
-