X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=snprintf.c;h=fcfcbb74885744b7fd67172ae40b3269ddbd94e2;hp=c2ebbde0da3d4e5c329ec7ea9bf21a059102246a;hb=89af1bcd125ce7dfd30acf684a4fdc98c44e36bc;hpb=6833ce8bdca2d64e14485118f2a4417b7e1cb1b1 diff --git a/snprintf.c b/snprintf.c index c2ebbde..fcfcbb7 100644 --- a/snprintf.c +++ b/snprintf.c @@ -40,13 +40,17 @@ * **************************************************************/ -#include "config.h" +#if HAVE_CONFIG_H +# include "config.h" +#endif #if !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF) #include -# include +#include #include +#include "lib/str.h" +#include "lib/debug.h" /* Define this as a fall through, HAVE_STDARG_H is probably already set */ @@ -56,17 +60,17 @@ #if defined(HAVE_STDARG_H) # include -# define HAVE_STDARGS /* let's hope that works everywhere (mj) */ +# define HAVE_STDARGS /* let's hope that works everywhere (mj) */ # define VA_LOCAL_DECL va_list ap # define VA_START(f) va_start(ap, f) -# define VA_SHIFT(v,t) ; /* no-op for ANSI */ +# define VA_SHIFT(v,t) ; /* no-op for ANSI */ # define VA_END va_end(ap) #else # if defined(HAVE_VARARGS_H) # include # undef HAVE_STDARGS # define VA_LOCAL_DECL va_list ap -# define VA_START(f) va_start(ap) /* f is ignored! */ +# define VA_START(f) va_start(ap) /* f is ignored! */ # define VA_SHIFT(v,t) v = va_arg(ap,t) # define VA_END va_end(ap) # else @@ -77,15 +81,16 @@ /*int snprintf (char *str, size_t count, const char *fmt, ...);*/ /*int vsnprintf (char *str, size_t count, const char *fmt, va_list arg);*/ -static void dopr (char *buffer, size_t maxlen, const char *format, +static void 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, - long double fvalue, int min, int max, int flags); -static void dopr_outch (char *buffer, size_t *currlen, size_t maxlen, char c ); +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, + long double fvalue, int min, int max, int flags); +static void dopr_outch (char *buffer, size_t * currlen, size_t maxlen, + char c); /* * dopr(): poor man's version of doprintf @@ -119,7 +124,8 @@ static void dopr_outch (char *buffer, size_t *currlen, size_t maxlen, char c ); #undef MAX #define MAX(p,q) ((p >= q) ? p : q) -static void dopr (char *buffer, size_t maxlen, const char *format, va_list args) +static void dopr (char *buffer, size_t maxlen, const char *format, + va_list args) { char ch; long value; @@ -131,228 +137,242 @@ static void 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') || (currlen >= maxlen)) + while (state != DP_S_DONE) { + if ((ch == '\0') || (currlen >= maxlen)) state = DP_S_DONE; - switch(state) - { + switch (state) { case DP_S_DEFAULT: - if (ch == '%') - state = DP_S_FLAGS; - else - dopr_outch (buffer, &currlen, maxlen, ch); + if (ch == '%') + state = DP_S_FLAGS; + else + dopr_outch (buffer, &currlen, maxlen, ch); ch = *format++; break; case DP_S_FLAGS: - switch (ch) - { + switch (ch) { case '-': - flags |= DP_F_MINUS; + flags |= DP_F_MINUS; ch = *format++; - break; + break; case '+': - flags |= DP_F_PLUS; + flags |= DP_F_PLUS; ch = *format++; - break; + break; case ' ': - flags |= DP_F_SPACE; + flags |= DP_F_SPACE; ch = *format++; - break; + break; case '#': - flags |= DP_F_NUM; + flags |= DP_F_NUM; ch = *format++; - break; + break; case '0': - flags |= DP_F_ZERO; + flags |= DP_F_ZERO; ch = *format++; - break; + break; default: - state = DP_S_MIN; - break; + state = DP_S_MIN; + break; } break; case DP_S_MIN: - if (isdigit((unsigned char)ch)) - { - min = 10*min + char_to_int (ch); - ch = *format++; - } - else if (ch == '*') - { - min = va_arg (args, int); - ch = *format++; - state = DP_S_DOT; - } - else - state = DP_S_DOT; + if (isdigit ((unsigned char) ch)) { + min = 10 * min + char_to_int (ch); + ch = *format++; + } + else if (ch == '*') { + min = va_arg (args, int); + + ch = *format++; + state = DP_S_DOT; + } + else + state = DP_S_DOT; break; case DP_S_DOT: - if (ch == '.') - { - state = DP_S_MAX; - ch = *format++; - } - else - state = DP_S_MOD; + if (ch == '.') { + state = DP_S_MAX; + ch = *format++; + } + else + state = DP_S_MOD; break; case DP_S_MAX: - if (isdigit((unsigned char)ch)) - { - if (max < 0) - max = 0; - max = 10*max + char_to_int (ch); - ch = *format++; - } - else if (ch == '*') - { - max = va_arg (args, int); - ch = *format++; - state = DP_S_MOD; - } - else - state = DP_S_MOD; + if (isdigit ((unsigned char) ch)) { + if (max < 0) + max = 0; + max = 10 * max + char_to_int (ch); + ch = *format++; + } + else if (ch == '*') { + max = va_arg (args, int); + + ch = *format++; + state = DP_S_MOD; + } + else + state = DP_S_MOD; break; case DP_S_MOD: /* Currently, we don't support Long Long, bummer */ - switch (ch) - { + switch (ch) { case 'h': - cflags = DP_C_SHORT; - ch = *format++; - break; + cflags = DP_C_SHORT; + ch = *format++; + break; case 'l': - cflags = DP_C_LONG; - ch = *format++; - break; + cflags = DP_C_LONG; + ch = *format++; + break; case 'L': - cflags = DP_C_LDOUBLE; - ch = *format++; - break; + cflags = DP_C_LDOUBLE; + ch = *format++; + break; default: - break; + break; } state = DP_S_CONV; break; case DP_S_CONV: - switch (ch) - { + switch (ch) { case 'd': case 'i': - if (cflags == DP_C_SHORT) - value = va_arg (args, short int); - else if (cflags == DP_C_LONG) - value = va_arg (args, long int); - else - value = va_arg (args, int); - fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags); - break; + if (cflags == DP_C_SHORT) + value = va_arg (args, short int); + + else if (cflags == DP_C_LONG) + value = va_arg (args, long int); + + else + value = va_arg (args, int); + + fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags); + break; case 'o': - flags |= DP_F_UNSIGNED; - if (cflags == DP_C_SHORT) - value = va_arg (args, unsigned short int); - else if (cflags == DP_C_LONG) - value = va_arg (args, unsigned long int); - else - value = va_arg (args, unsigned int); - fmtint (buffer, &currlen, maxlen, value, 8, min, max, flags); - break; + flags |= DP_F_UNSIGNED; + if (cflags == DP_C_SHORT) + value = va_arg (args, unsigned short int); + + else if (cflags == DP_C_LONG) + value = va_arg (args, unsigned long int); + + else + value = va_arg (args, unsigned int); + + fmtint (buffer, &currlen, maxlen, value, 8, min, max, flags); + break; case 'u': - flags |= DP_F_UNSIGNED; - if (cflags == DP_C_SHORT) - value = va_arg (args, unsigned short int); - else if (cflags == DP_C_LONG) - value = va_arg (args, unsigned long int); - else - value = va_arg (args, unsigned int); - fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags); - break; + flags |= DP_F_UNSIGNED; + if (cflags == DP_C_SHORT) + value = va_arg (args, unsigned short int); + + else if (cflags == DP_C_LONG) + value = va_arg (args, unsigned long int); + + else + value = va_arg (args, unsigned int); + + fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags); + break; case 'X': - flags |= DP_F_UP; + flags |= DP_F_UP; case 'x': - flags |= DP_F_UNSIGNED; - if (cflags == DP_C_SHORT) - value = va_arg (args, unsigned short int); - else if (cflags == DP_C_LONG) - value = va_arg (args, unsigned long int); - else - value = va_arg (args, unsigned int); - fmtint (buffer, &currlen, maxlen, value, 16, min, max, flags); - break; + flags |= DP_F_UNSIGNED; + if (cflags == DP_C_SHORT) + value = va_arg (args, unsigned short int); + + else if (cflags == DP_C_LONG) + value = va_arg (args, unsigned long int); + + else + value = va_arg (args, unsigned int); + + fmtint (buffer, &currlen, maxlen, value, 16, min, max, flags); + break; case 'f': - if (cflags == DP_C_LDOUBLE) - fvalue = va_arg (args, long double); - else - fvalue = va_arg (args, double); - /* um, floating point? */ - fmtfp (buffer, &currlen, maxlen, fvalue, min, max, flags); - break; + if (cflags == DP_C_LDOUBLE) + fvalue = va_arg (args, long double); + + else + fvalue = va_arg (args, double); + + /* um, floating point? */ + fmtfp (buffer, &currlen, maxlen, fvalue, min, max, flags); + break; case 'E': - flags |= DP_F_UP; + flags |= DP_F_UP; case 'e': - if (cflags == DP_C_LDOUBLE) - fvalue = va_arg (args, long double); - else - fvalue = va_arg (args, double); - break; + if (cflags == DP_C_LDOUBLE) + fvalue = va_arg (args, long double); + + else + fvalue = va_arg (args, double); + + break; case 'G': - flags |= DP_F_UP; + flags |= DP_F_UP; case 'g': - if (cflags == DP_C_LDOUBLE) - fvalue = va_arg (args, long double); - else - fvalue = va_arg (args, double); - break; + if (cflags == DP_C_LDOUBLE) + fvalue = va_arg (args, long double); + + else + fvalue = va_arg (args, double); + + break; case 'c': - dopr_outch (buffer, &currlen, maxlen, va_arg (args, int)); - break; + dopr_outch (buffer, &currlen, maxlen, va_arg (args, int)); + + break; case 's': - strvalue = va_arg (args, char *); - if (max < 0) - max = maxlen; /* ie, no max */ - fmtstr (buffer, &currlen, maxlen, strvalue, flags, min, max); - break; + strvalue = va_arg (args, char *); + + if (max < 0) + max = maxlen; /* ie, no max */ + fmtstr (buffer, &currlen, maxlen, strvalue, flags, min, max); + break; case 'p': - strvalue = va_arg (args, void *); - fmtint (buffer, &currlen, maxlen, (long) strvalue, 16, min, max, flags); - break; + strvalue = va_arg (args, void *); + + fmtint (buffer, &currlen, maxlen, (long) strvalue, 16, min, max, + flags); + break; case 'n': - if (cflags == DP_C_SHORT) - { - short int *num; - num = va_arg (args, short int *); - *num = currlen; - } - else if (cflags == DP_C_LONG) - { - long int *num; - num = va_arg (args, long int *); - *num = currlen; - } - else - { - int *num; - num = va_arg (args, int *); - *num = currlen; + if (cflags == DP_C_SHORT) { + short int *num; + num = va_arg (args, short int *); + + *num = currlen; } - break; + else if (cflags == DP_C_LONG) { + long int *num; + num = va_arg (args, long int *); + + *num = currlen; + } + else { + int *num; + num = va_arg (args, int *); + + *num = currlen; + } + break; case '%': - dopr_outch (buffer, &currlen, maxlen, ch); - break; + dopr_outch (buffer, &currlen, maxlen, ch); + break; case 'w': - /* not supported yet, treat as next char */ - ch = *format++; - break; + /* not supported yet, treat as next char */ + ch = *format++; + break; default: - /* Unknown, skip */ - break; + /* Unknown, skip */ + break; } ch = *format++; state = DP_S_DEFAULT; @@ -363,46 +383,42 @@ static void dopr (char *buffer, size_t maxlen, const char *format, va_list args) break; default: /* hmm? */ - break; /* some picky compilers need this */ + break; /* some picky compilers need this */ } } - if (currlen < maxlen - 1) + if (currlen < maxlen - 1) buffer[currlen] = '\0'; - else + else buffer[maxlen - 1] = '\0'; } -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 padlen, strln; /* amount to pad */ int cnt = 0; - - if (value == 0) - { + + if (value == 0) { value = ""; } - for (strln = 0; value[strln]; ++strln); /* strlen */ + for (strln = 0; value[strln]; ++strln); /* str_len */ padlen = min - strln; - if (padlen < 0) + if (padlen < 0) padlen = 0; - if (flags & DP_F_MINUS) - padlen = -padlen; /* Left Justify */ + if (flags & DP_F_MINUS) + padlen = -padlen; /* Left Justify */ - while ((padlen > 0) && (cnt < max)) - { + while ((padlen > 0) && (cnt < max)) { dopr_outch (buffer, currlen, maxlen, ' '); --padlen; ++cnt; } - while (*value && (cnt < max)) - { + while (*value && (cnt < max)) { dopr_outch (buffer, currlen, maxlen, *value++); ++cnt; } - while ((padlen < 0) && (cnt < max)) - { + while ((padlen < 0) && (cnt < max)) { dopr_outch (buffer, currlen, maxlen, ' '); ++padlen; ++cnt; @@ -411,89 +427,85 @@ 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; char convert[20]; int place = 0; - int spadlen = 0; /* amount to space pad */ - int zpadlen = 0; /* amount to zero pad */ + 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 ) { + if (!(flags & DP_F_UNSIGNED)) { + if (value < 0) { signvalue = '-'; uvalue = -value; } - else - if (flags & DP_F_PLUS) /* Do a sign (+/i) */ - signvalue = '+'; - else - if (flags & DP_F_SPACE) - signvalue = ' '; + else if (flags & DP_F_PLUS) /* Do a sign (+/i) */ + signvalue = '+'; + else if (flags & DP_F_SPACE) + signvalue = ' '; } - - if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */ + + if (flags & DP_F_UP) + caps = 1; /* Should characters be upper case? */ do { - convert[place++] = - (caps? "0123456789ABCDEF":"0123456789abcdef") - [uvalue % (unsigned)base ]; - uvalue = (uvalue / (unsigned)base ); - } while(uvalue && (place < 20)); - if (place == 20) place--; + convert[place++] = (caps ? "0123456789ABCDEF" : "0123456789abcdef") + [uvalue % (unsigned) base]; + uvalue = (uvalue / (unsigned) base); + } while (uvalue && (place < 20)); + if (place == 20) + place--; convert[place] = 0; zpadlen = max - place; spadlen = min - MAX (max, place) - (signvalue ? 1 : 0); - if (zpadlen < 0) zpadlen = 0; - if (spadlen < 0) spadlen = 0; - if (flags & DP_F_ZERO) - { - zpadlen = MAX(zpadlen, spadlen); + if (zpadlen < 0) + zpadlen = 0; + if (spadlen < 0) + spadlen = 0; + if (flags & DP_F_ZERO) { + zpadlen = MAX (zpadlen, spadlen); spadlen = 0; } - if (flags & DP_F_MINUS) - spadlen = -spadlen; /* Left Justifty */ + if (flags & DP_F_MINUS) + spadlen = -spadlen; /* Left Justifty */ #ifdef DEBUG_SNPRINTF - dprint (1, (debugfile, "zpad: %d, spad: %d, min: %d, max: %d, place: %d\n", - zpadlen, spadlen, min, max, place)); + debug_print (1, ("zpad: %d, spad: %d, min: %d, max: %d, place: %d\n", + zpadlen, spadlen, min, max, place)); #endif /* Spaces */ - while (spadlen > 0) - { + while (spadlen > 0) { dopr_outch (buffer, currlen, maxlen, ' '); --spadlen; } /* Sign */ - if (signvalue) + if (signvalue) dopr_outch (buffer, currlen, maxlen, signvalue); /* Zeros */ - if (zpadlen > 0) - { - while (zpadlen > 0) - { + if (zpadlen > 0) { + while (zpadlen > 0) { dopr_outch (buffer, currlen, maxlen, '0'); --zpadlen; } } /* 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, ' '); @@ -515,12 +527,11 @@ static long double pow10 (int exp) { long double result = 1; - while (exp) - { + while (exp) { result *= 10; exp--; } - + return result; } @@ -536,8 +547,8 @@ static long round (long double value) return intpart; } -static void fmtfp (char *buffer, size_t *currlen, size_t maxlen, - long double fvalue, int min, int max, int flags) +static void fmtfp (char *buffer, size_t * currlen, size_t maxlen, + long double fvalue, int min, int max, int flags) { int signvalue = 0; long double ufvalue; @@ -545,12 +556,12 @@ static void fmtfp (char *buffer, size_t *currlen, size_t maxlen, char fconvert[20]; int iplace = 0; int fplace = 0; - int padlen = 0; /* amount to pad */ - int zpadlen = 0; + int padlen = 0; /* amount to pad */ + int zpadlen = 0; int caps = 0; long intpart; long fracpart; - + /* * AIX manpage says the default is 0, but Solaris says the default * is 6, and sprintf on AIX defaults to 6 @@ -562,15 +573,14 @@ static void fmtfp (char *buffer, size_t *currlen, size_t maxlen, if (fvalue < 0) signvalue = '-'; - else - if (flags & DP_F_PLUS) /* Do a sign (+/i) */ - signvalue = '+'; - else - if (flags & DP_F_SPACE) - signvalue = ' '; + else if (flags & DP_F_PLUS) /* Do a sign (+/i) */ + signvalue = '+'; + else if (flags & DP_F_SPACE) + signvalue = ' '; #if 0 - if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */ + if (flags & DP_F_UP) + caps = 1; /* Should characters be upper case? */ #endif intpart = ufvalue; @@ -587,67 +597,64 @@ static void fmtfp (char *buffer, size_t *currlen, size_t maxlen, */ fracpart = round ((pow10 (max)) * (ufvalue - intpart)); - if (fracpart >= pow10 (max)) - { + if (fracpart >= pow10 (max)) { intpart++; fracpart -= pow10 (max); } #ifdef DEBUG_SNPRINTF - dprint (1, (debugfile, "fmtfp: %f =? %d.%d\n", fvalue, intpart, fracpart)); + debug_print (1, ("fmtfp: %f =? %d.%d\n", fvalue, intpart, fracpart)); #endif /* Convert integer part */ do { iconvert[iplace++] = - (caps? "0123456789ABCDEF":"0123456789abcdef")[intpart % 10]; + (caps ? "0123456789ABCDEF" : "0123456789abcdef")[intpart % 10]; intpart = (intpart / 10); - } while(intpart && (iplace < 20)); - if (iplace == 20) iplace--; + } while (intpart && (iplace < 20)); + if (iplace == 20) + iplace--; iconvert[iplace] = 0; /* Convert fractional part */ do { fconvert[fplace++] = - (caps? "0123456789ABCDEF":"0123456789abcdef")[fracpart % 10]; + (caps ? "0123456789ABCDEF" : "0123456789abcdef")[fracpart % 10]; fracpart = (fracpart / 10); - } while(fracpart && (fplace < 20)); - if (fplace == 20) fplace--; + } while (fracpart && (fplace < 20)); + if (fplace == 20) + 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) - padlen = -padlen; /* Left Justifty */ + if (flags & DP_F_MINUS) + padlen = -padlen; /* Left Justifty */ - if ((flags & DP_F_ZERO) && (padlen > 0)) - { - if (signvalue) - { + if ((flags & DP_F_ZERO) && (padlen > 0)) { + if (signvalue) { dopr_outch (buffer, currlen, maxlen, signvalue); --padlen; signvalue = 0; } - while (padlen > 0) - { + while (padlen > 0) { dopr_outch (buffer, currlen, maxlen, '0'); --padlen; } } - while (padlen > 0) - { + while (padlen > 0) { 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]); /* @@ -656,23 +663,21 @@ static void fmtfp (char *buffer, size_t *currlen, size_t maxlen, */ dopr_outch (buffer, currlen, maxlen, '.'); - while (fplace > 0) + while (fplace > 0) dopr_outch (buffer, currlen, maxlen, fconvert[--fplace]); - while (zpadlen > 0) - { + while (zpadlen > 0) { dopr_outch (buffer, currlen, maxlen, '0'); --zpadlen; } - while (padlen < 0) - { + while (padlen < 0) { dopr_outch (buffer, currlen, maxlen, ' '); ++padlen; } } -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; @@ -683,17 +688,18 @@ static void dopr_outch (char *buffer, size_t *currlen, size_t maxlen, char c) int vsnprintf (char *str, size_t count, const char *fmt, va_list args) { str[0] = 0; - dopr(str, count, fmt, args); - return(strlen(str)); + dopr (str, count, fmt, args); + return (str_len (str)); } #endif /* !HAVE_VSNPRINTF */ #ifndef HAVE_SNPRINTF /* VARARGS3 */ #ifdef HAVE_STDARGS -int snprintf (char *str,size_t count,const char *fmt,...) +int snprintf (char *str, size_t count, const char *fmt, ...) #else -int snprintf (va_alist) va_dcl +int snprintf (va_alist) + va_dcl #endif { #ifndef HAVE_STDARGS @@ -702,14 +708,16 @@ int snprintf (va_alist) va_dcl char *fmt; #endif VA_LOCAL_DECL; - + VA_START (fmt); VA_SHIFT (str, char *); - VA_SHIFT (count, size_t ); + + VA_SHIFT (count, size_t); VA_SHIFT (fmt, char *); - (void) vsnprintf(str, count, fmt, ap); + + (void) vsnprintf (str, count, fmt, ap); VA_END; - return(strlen(str)); + return (str_len (str)); } #ifdef TEST_SNPRINTF @@ -734,8 +742,9 @@ int main (void) "%3.2f", NULL }; - double fp_nums[] = { -1.5, 134.21, 91340.2, 341.1234, 0203.9, 0.96, 0.996, - 0.9996, 1.996, 4.136, 0}; + double fp_nums[] = { -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", @@ -748,37 +757,33 @@ int main (void) "%4d", NULL }; - long int_nums[] = { -1, 134, 91340, 341, 0203, 0}; + long int_nums[] = { -1, 134, 91340, 341, 0203, 0 }; int x, y; int fail = 0; int num = 0; printf ("Testing snprintf format codes against system sprintf...\n"); - for (x = 0; fp_fmt[x] != NULL ; x++) - for (y = 0; fp_nums[y] != 0 ; y++) - { + for (x = 0; fp_fmt[x] != NULL; x++) + for (y = 0; fp_nums[y] != 0; y++) { 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\tsprintf = %s\n", /* __SPRINTF_CHECKED__ */ - fp_fmt[x], buf1, buf2); - fail++; + if (str_cmp (buf1, buf2)) { + printf ("snprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf = %s\n", /* __SPRINTF_CHECKED__ */ + fp_fmt[x], buf1, buf2); + fail++; } num++; } - for (x = 0; int_fmt[x] != NULL ; x++) - for (y = 0; int_nums[y] != 0 ; y++) - { + for (x = 0; int_fmt[x] != NULL; x++) + for (y = 0; int_nums[y] != 0; y++) { 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\tsprintf = %s\n", /* __SPRINTF_CHECKED__ */ - int_fmt[x], buf1, buf2); - fail++; + if (str_cmp (buf1, buf2)) { + printf ("snprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf = %s\n", /* __SPRINTF_CHECKED__ */ + int_fmt[x], buf1, buf2); + fail++; } num++; }