]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/portab/vsnprintf.c
Modes.txt: Add "name prefixes" to channel user mode description
[ngircd-alex.git] / src / portab / vsnprintf.c
index 843f4ff3f55f8164d0703e6e53b7c74d80ca4dc1..4c65db1febd5c30008f421a0a6d1e45b28f8e11c 100644 (file)
@@ -50,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
@@ -107,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
@@ -151,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;
@@ -163,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;
@@ -224,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;
@@ -269,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);
@@ -399,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;
@@ -423,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;
@@ -446,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;
@@ -456,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 = '-';
@@ -473,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 {
@@ -493,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
@@ -508,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 */
@@ -520,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, ' ');
@@ -530,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;
@@ -592,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;
@@ -609,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
         */
@@ -636,8 +645,8 @@ static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
                }
        }
 
-       /* 
-        * 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)
@@ -651,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);
@@ -688,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);
@@ -713,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
@@ -729,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;
@@ -745,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;
@@ -754,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);