]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/portab/vsnprintf.c
Correctly use cloaked IRC masks on "INVITE nickname"
[ngircd-alex.git] / src / portab / vsnprintf.c
index 081152e123b7f62fda95ad9fbb11e9606f26744d..39a6c5fae903ba717c2af15eba44f74c5902a7ed 100644 (file)
@@ -9,7 +9,6 @@
  * Please read the file COPYING, README and AUTHORS for more information.
  */
 
-
 #include "portab.h"
 
 /**
@@ -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;
@@ -411,8 +410,9 @@ static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args
        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;
@@ -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;
@@ -533,7 +534,8 @@ 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;
 
@@ -543,7 +545,8 @@ static LDOUBLE abs_val(LDOUBLE value)
        return result;
 }
 
-static LDOUBLE POW10(int exp)
+static LDOUBLE
+POW10(int exp)
 {
        LDOUBLE result = 1;
        
@@ -555,7 +558,8 @@ static LDOUBLE POW10(int exp)
        return result;
 }
 
-static LLONG ROUND(LDOUBLE value)
+static LLONG
+ROUND(LDOUBLE value)
 {
        LLONG intpart;
 
@@ -568,7 +572,8 @@ static LLONG ROUND(LDOUBLE value)
 
 /* 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;
@@ -602,8 +607,9 @@ static double my_modf(double x0, double *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;
@@ -639,14 +645,6 @@ 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 
         * conversion method
@@ -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,14 +764,25 @@ 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;
@@ -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- */