]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/portab/vsnprintf.c
Whitespace fixes (no functional changes)
[ngircd-alex.git] / src / portab / vsnprintf.c
index 081152e123b7f62fda95ad9fbb11e9606f26744d..4c65db1febd5c30008f421a0a6d1e45b28f8e11c 100644 (file)
@@ -9,7 +9,6 @@
  * Please read the file COPYING, README and AUTHORS for more information.
  */
 
-
 #include "portab.h"
 
 /**
@@ -51,9 +50,9 @@
  *  original. Also, there is now a builtin-test, just compile with:
  *    gcc -DTEST_SNPRINTF -o snprintf snprintf.c -lm
  *  and run snprintf for results.
- * 
+ *
  * Thomas Roessler <roessler@guug.de> 01/27/98 for mutt 0.89i
- *  The PGP code was using unsigned hexadecimal formats. 
+ *  The PGP code was using unsigned hexadecimal formats.
  *  Unfortunately, unsigned formats simply didn't work.
  *
  * Michael Elkins <me@cs.hmc.edu> 03/05/98 for mutt 0.90.8
@@ -73,7 +72,6 @@
  *  removed [v]asprintf() and C99 tests: not needed by ngIRCd.
  */
 
-
 #ifdef HAVE_STRING_H
 #include <string.h>
 #endif
@@ -89,7 +87,6 @@
 #include <stdlib.h>
 #endif
 
-
 #if defined(HAVE_SNPRINTF) && defined(HAVE_VSNPRINTF)
 /* only include stdio.h if we are not re-defining snprintf or vsnprintf */
 #include <stdio.h>
@@ -110,15 +107,16 @@ void dummy_snprintf PARAMS(( void )) { }
 #define LLONG long
 #endif
 
-static size_t dopr(char *buffer, size_t maxlen, const char *format, 
-                  va_list args);
-static void fmtstr(char *buffer, size_t *currlen, size_t maxlen,
-                   char *value, int flags, int min, int max);
-static void fmtint(char *buffer, size_t *currlen, size_t maxlen,
-                   long value, int base, int min, int max, int flags);
-static void fmtfp(char *buffer, size_t *currlen, size_t maxlen,
-                  LDOUBLE fvalue, int min, int max, int flags);
-static void dopr_outch(char *buffer, size_t *currlen, size_t maxlen, char c);
+static size_t dopr PARAMS((char *buffer, size_t maxlen, const char *format,
+                          va_list args));
+static void fmtstr PARAMS((char *buffer, size_t *currlen, size_t maxlen,
+                          char *value, int flags, int min, int max));
+static void fmtint PARAMS((char *buffer, size_t *currlen, size_t maxlen,
+                          long value, int base, int min, int max, int flags));
+static void fmtfp PARAMS((char *buffer, size_t *currlen, size_t maxlen,
+                         LDOUBLE fvalue, int min, int max, int flags));
+static void dopr_outch PARAMS((char *buffer, size_t *currlen, size_t maxlen,
+                              char c));
 
 /*
  * dopr(): poor man's version of doprintf
@@ -154,7 +152,8 @@ static void dopr_outch(char *buffer, size_t *currlen, size_t maxlen, char c);
 #define MAX(p,q) (((p) >= (q)) ? (p) : (q))
 #endif
 
-static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args)
+static size_t
+dopr(char *buffer, size_t maxlen, const char *format, va_list args)
 {
        char ch;
        LLONG value;
@@ -166,21 +165,21 @@ static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args
        int flags;
        int cflags;
        size_t currlen;
-       
+
        state = DP_S_DEFAULT;
        currlen = flags = cflags = min = 0;
        max = -1;
        ch = *format++;
-       
+
        while (state != DP_S_DONE) {
-               if (ch == '\0') 
+               if (ch == '\0')
                        state = DP_S_DONE;
 
                switch(state) {
                case DP_S_DEFAULT:
-                       if (ch == '%') 
+                       if (ch == '%')
                                state = DP_S_FLAGS;
-                       else 
+                       else
                                dopr_outch (buffer, &currlen, maxlen, ch);
                        ch = *format++;
                        break;
@@ -227,7 +226,7 @@ static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args
                        if (ch == '.') {
                                state = DP_S_MAX;
                                ch = *format++;
-                       } else { 
+                       } else {
                                state = DP_S_MOD;
                        }
                        break;
@@ -272,7 +271,7 @@ static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args
                        switch (ch) {
                        case 'd':
                        case 'i':
-                               if (cflags == DP_C_SHORT) 
+                               if (cflags == DP_C_SHORT)
                                        value = va_arg (args, int);
                                else if (cflags == DP_C_LONG)
                                        value = va_arg (args, long int);
@@ -402,17 +401,18 @@ static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args
                }
        }
        if (maxlen != 0) {
-               if (currlen < maxlen - 1) 
+               if (currlen < maxlen - 1)
                        buffer[currlen] = '\0';
-               else if (maxlen > 0) 
+               else if (maxlen > 0)
                        buffer[maxlen - 1] = '\0';
        }
-       
+
        return currlen;
 }
 
-static void fmtstr(char *buffer, size_t *currlen, size_t maxlen,
-                   char *value, int flags, int min, int max)
+static void
+fmtstr(char *buffer, size_t *currlen, size_t maxlen, char *value, int flags,
+       int min, int max)
 {
        int padlen, strln;     /* amount to pad */
        int cnt = 0;
@@ -426,11 +426,11 @@ static void fmtstr(char *buffer, size_t *currlen, size_t maxlen,
 
        for (strln = 0; value[strln]; ++strln); /* strlen */
        padlen = min - strln;
-       if (padlen < 0) 
+       if (padlen < 0)
                padlen = 0;
-       if (flags & DP_F_MINUS) 
+       if (flags & DP_F_MINUS)
                padlen = -padlen; /* Left Justify */
-       
+
        while ((padlen > 0) && (cnt < max)) {
                dopr_outch (buffer, currlen, maxlen, ' ');
                --padlen;
@@ -449,8 +449,9 @@ static void fmtstr(char *buffer, size_t *currlen, size_t maxlen,
 
 /* Have to handle DP_F_NUM (ie 0x and 0 alternates) */
 
-static void fmtint(char *buffer, size_t *currlen, size_t maxlen,
-                   long value, int base, int min, int max, int flags)
+static void
+fmtint(char *buffer, size_t *currlen, size_t maxlen, long value, int base,
+       int min, int max, int flags)
 {
        int signvalue = 0;
        unsigned long uvalue;
@@ -459,12 +460,12 @@ static void fmtint(char *buffer, size_t *currlen, size_t maxlen,
        int spadlen = 0; /* amount to space pad */
        int zpadlen = 0; /* amount to zero pad */
        int caps = 0;
-       
+
        if (max < 0)
                max = 0;
-       
+
        uvalue = value;
-       
+
        if(!(flags & DP_F_UNSIGNED)) {
                if( value < 0 ) {
                        signvalue = '-';
@@ -476,7 +477,7 @@ static void fmtint(char *buffer, size_t *currlen, size_t maxlen,
                                signvalue = ' ';
                }
        }
-  
+
        if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */
 
        do {
@@ -496,7 +497,7 @@ static void fmtint(char *buffer, size_t *currlen, size_t maxlen,
                zpadlen = MAX(zpadlen, spadlen);
                spadlen = 0;
        }
-       if (flags & DP_F_MINUS) 
+       if (flags & DP_F_MINUS)
                spadlen = -spadlen; /* Left Justifty */
 
 #ifdef DEBUG_SNPRINTF
@@ -511,7 +512,7 @@ static void fmtint(char *buffer, size_t *currlen, size_t maxlen,
        }
 
        /* Sign */
-       if (signvalue) 
+       if (signvalue)
                dopr_outch (buffer, currlen, maxlen, signvalue);
 
        /* Zeros */
@@ -523,9 +524,9 @@ static void fmtint(char *buffer, size_t *currlen, size_t maxlen,
        }
 
        /* Digits */
-       while (place > 0) 
+       while (place > 0)
                dopr_outch (buffer, currlen, maxlen, convert[--place]);
-  
+
        /* Left Justified spaces */
        while (spadlen < 0) {
                dopr_outch (buffer, currlen, maxlen, ' ');
@@ -533,42 +534,46 @@ static void fmtint(char *buffer, size_t *currlen, size_t maxlen,
        }
 }
 
-static LDOUBLE abs_val(LDOUBLE value)
+static LDOUBLE
+abs_val(LDOUBLE value)
 {
        LDOUBLE result = value;
 
        if (value < 0)
                result = -value;
-       
+
        return result;
 }
 
-static LDOUBLE POW10(int exp)
+static LDOUBLE
+POW10(int exp)
 {
        LDOUBLE result = 1;
-       
+
        while (exp) {
                result *= 10;
                exp--;
        }
-  
+
        return result;
 }
 
-static LLONG ROUND(LDOUBLE value)
+static LLONG
+ROUND(LDOUBLE value)
 {
        LLONG intpart;
 
        intpart = (LLONG)value;
        value = value - intpart;
        if (value >= 0.5) intpart++;
-       
+
        return intpart;
 }
 
 /* a replacement for modf that doesn't need the math library. Should
    be portable, but slow */
-static double my_modf(double x0, double *iptr)
+static double
+my_modf(double x0, double *iptr)
 {
        int i;
        long l;
@@ -595,15 +600,16 @@ static double my_modf(double x0, double *iptr)
                ret = my_modf(x0-l*f, &i2);
                (*iptr) = l*f + i2;
                return ret;
-       } 
+       }
 
        (*iptr) = l;
        return x - (*iptr);
 }
 
 
-static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
-                  LDOUBLE fvalue, int min, int max, int flags)
+static void
+fmtfp (char *buffer, size_t *currlen, size_t maxlen, LDOUBLE fvalue,
+       int min, int max, int flags)
 {
        int signvalue = 0;
        double ufvalue;
@@ -612,14 +618,14 @@ static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
        int iplace = 0;
        int fplace = 0;
        int padlen = 0; /* amount to pad */
-       int zpadlen = 0; 
+       int zpadlen = 0;
        int caps = 0;
        int index;
        double intpart;
        double fracpart;
        double temp;
-  
-       /* 
+
+       /*
         * AIX manpage says the default is 0, but Solaris says the default
         * is 6, and sprintf on AIX defaults to 6
         */
@@ -639,16 +645,8 @@ static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
                }
        }
 
-#if 0
-       if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */
-#endif
-
-#if 0
-       if (max == 0) ufvalue += 0.5; /* if max = 0 we must round */
-#endif
-
-       /* 
-        * Sorry, we only support 16 digits past the decimal because of our 
+       /*
+        * Sorry, we only support 16 digits past the decimal because of our
         * conversion method
         */
        if (max > 16)
@@ -662,7 +660,7 @@ static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
        my_modf(temp, &intpart);
 
        fracpart = ROUND((POW10(max)) * (ufvalue - intpart));
-       
+
        if (fracpart >= POW10(max)) {
                intpart++;
                fracpart -= POW10(max);
@@ -699,16 +697,16 @@ static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
                if (fplace == 311) fplace--;
        }
        fconvert[fplace] = 0;
-  
+
        /* -1 for decimal point, another -1 if we are printing a sign */
-       padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0); 
+       padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0);
        zpadlen = max - fplace;
        if (zpadlen < 0) zpadlen = 0;
-       if (padlen < 0) 
+       if (padlen < 0)
                padlen = 0;
-       if (flags & DP_F_MINUS) 
+       if (flags & DP_F_MINUS)
                padlen = -padlen; /* Left Justifty */
-       
+
        if ((flags & DP_F_ZERO) && (padlen > 0)) {
                if (signvalue) {
                        dopr_outch (buffer, currlen, maxlen, signvalue);
@@ -724,10 +722,10 @@ static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
                dopr_outch (buffer, currlen, maxlen, ' ');
                --padlen;
        }
-       if (signvalue) 
+       if (signvalue)
                dopr_outch (buffer, currlen, maxlen, signvalue);
-       
-       while (iplace > 0) 
+
+       while (iplace > 0)
                dopr_outch (buffer, currlen, maxlen, iconvert[--iplace]);
 
 #ifdef DEBUG_SNPRINTF
@@ -740,11 +738,11 @@ static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
         */
        if (max > 0) {
                dopr_outch (buffer, currlen, maxlen, '.');
-               
-               while (fplace > 0) 
+
+               while (fplace > 0)
                        dopr_outch (buffer, currlen, maxlen, fconvert[--fplace]);
        }
-       
+
        while (zpadlen > 0) {
                dopr_outch (buffer, currlen, maxlen, '0');
                --zpadlen;
@@ -756,7 +754,8 @@ static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
        }
 }
 
-static void dopr_outch(char *buffer, size_t *currlen, size_t maxlen, char c)
+static void
+dopr_outch(char *buffer, size_t *currlen, size_t maxlen, char c)
 {
        if (*currlen < maxlen) {
                buffer[(*currlen)] = c;
@@ -765,18 +764,29 @@ static void dopr_outch(char *buffer, size_t *currlen, size_t maxlen, char c)
 }
 
 #if !defined(HAVE_VSNPRINTF)
-int vsnprintf (char *str, size_t count, const char *fmt, va_list args)
+int
+vsnprintf (char *str, size_t count, const char *fmt, va_list args)
 {
        return dopr(str, count, fmt, args);
 }
 #endif
 
 #if !defined(HAVE_SNPRINTF)
-int snprintf(char *str,size_t count,const char *fmt,...)
+#ifdef PROTOTYPES
+int
+snprintf(char *str, size_t count, const char *fmt, ...)
+#else
+int
+snprintf(str, count, fmt, va_alist)
+char *str;
+size_t count;
+const char *fmt;
+va_dcl
+#endif
 {
        size_t ret;
        va_list ap;
-    
+
        va_start(ap, fmt);
        ret = vsnprintf(str, count, fmt, ap);
        va_end(ap);
@@ -786,138 +796,4 @@ int snprintf(char *str,size_t count,const char *fmt,...)
 
 #endif
 
-
-#ifdef TEST_SNPRINTF
-int sprintf(char *str,const char *fmt,...);
-int main (void)
-{
-       char buf1[1024];
-       char buf2[1024];
-       char *fp_fmt[] = {
-               "%1.1f",
-               "%-1.5f",
-               "%1.5f",
-               "%123.9f",
-               "%10.5f",
-               "% 10.5f",
-               "%+22.9f",
-               "%+4.9f",
-               "%01.3f",
-               "%4f",
-               "%3.1f",
-               "%3.2f",
-               "%.0f",
-               "%f",
-               "-16.16f",
-               NULL
-       };
-       double fp_nums[] = { 6442452944.1234, -1.5, 134.21, 91340.2, 341.1234, 0203.9, 0.96, 0.996, 
-                            0.9996, 1.996, 4.136,  0};
-       char *int_fmt[] = {
-               "%-1.5d",
-               "%1.5d",
-               "%123.9d",
-               "%5.5d",
-               "%10.5d",
-               "% 10.5d",
-               "%+22.33d",
-               "%01.3d",
-               "%4d",
-               "%d",
-               NULL
-       };
-       long int_nums[] = { -1, 134, 91340, 341, 0203, 0};
-       char *str_fmt[] = {
-               "10.5s",
-               "5.10s",
-               "10.1s",
-               "0.10s",
-               "10.0s",
-               "1.10s",
-               "%s",
-               "%.1s",
-               "%.10s",
-               "%10s",
-               NULL
-       };
-       char *str_vals[] = {"hello", "a", "", "a longer string", NULL};
-       int x, y;
-       int fail = 0;
-       int num = 0;
-
-       printf ("Testing snprintf format codes against system sprintf...\n");
-
-       for (x = 0; fp_fmt[x] ; x++) {
-               for (y = 0; fp_nums[y] != 0 ; y++) {
-                       int l1 = snprintf(NULL, 0, fp_fmt[x], fp_nums[y]);
-                       int l2 = snprintf(buf1, sizeof(buf1), fp_fmt[x], fp_nums[y]);
-                       sprintf (buf2, fp_fmt[x], fp_nums[y]);
-                       if (strcmp (buf1, buf2)) {
-                               printf("snprintf doesn't match Format: %s\n\tsnprintf = [%s]\n\t sprintf = [%s]\n", 
-                                      fp_fmt[x], buf1, buf2);
-                               fail++;
-                       }
-                       if (l1 != l2) {
-                               printf("snprintf l1 != l2 (%d %d) %s\n", l1, l2, fp_fmt[x]);
-                               fail++;
-                       }
-                       num++;
-               }
-       }
-
-       for (x = 0; int_fmt[x] ; x++) {
-               for (y = 0; int_nums[y] != 0 ; y++) {
-                       int l1 = snprintf(NULL, 0, int_fmt[x], int_nums[y]);
-                       int l2 = snprintf(buf1, sizeof(buf1), int_fmt[x], int_nums[y]);
-                       sprintf (buf2, int_fmt[x], int_nums[y]);
-                       if (strcmp (buf1, buf2)) {
-                               printf("snprintf doesn't match Format: %s\n\tsnprintf = [%s]\n\t sprintf = [%s]\n", 
-                                      int_fmt[x], buf1, buf2);
-                               fail++;
-                       }
-                       if (l1 != l2) {
-                               printf("snprintf l1 != l2 (%d %d) %s\n", l1, l2, int_fmt[x]);
-                               fail++;
-                       }
-                       num++;
-               }
-       }
-
-       for (x = 0; str_fmt[x] ; x++) {
-               for (y = 0; str_vals[y] != 0 ; y++) {
-                       int l1 = snprintf(NULL, 0, str_fmt[x], str_vals[y]);
-                       int l2 = snprintf(buf1, sizeof(buf1), str_fmt[x], str_vals[y]);
-                       sprintf (buf2, str_fmt[x], str_vals[y]);
-                       if (strcmp (buf1, buf2)) {
-                               printf("snprintf doesn't match Format: %s\n\tsnprintf = [%s]\n\t sprintf = [%s]\n", 
-                                      str_fmt[x], buf1, buf2);
-                               fail++;
-                       }
-                       if (l1 != l2) {
-                               printf("snprintf l1 != l2 (%d %d) %s\n", l1, l2, str_fmt[x]);
-                               fail++;
-                       }
-                       num++;
-               }
-       }
-
-       printf ("%d tests failed out of %d.\n", fail, num);
-
-       printf("seeing how many digits we support\n");
-       {
-               double v0 = 0.12345678901234567890123456789012345678901;
-               for (x=0; x<100; x++) {
-                       snprintf(buf1, sizeof(buf1), "%1.1f", v0*pow(10, x));
-                       sprintf(buf2,           "%1.1f", v0*pow(10, x));
-                       if (strcmp(buf1, buf2)) {
-                               printf("we seem to support %d digits\n", x-1);
-                               break;
-                       }
-               }
-       }
-       return 0;
-}
-#endif /* SNPRINTF_TEST */
-
-
 /* -eof- */