X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=pppd%2Futils.c;h=2cc0e9110f9383105e9b9c85333a269c1cb20d44;hb=c10c3c7cb3e779af5286430d5c9bb835a873ab32;hp=5c9ba6437757d6d4a679c2e0f642f65020ef8368;hpb=2b6310fd24dba8e0fca8999916a162f0a1842a84;p=ppp.git diff --git a/pppd/utils.c b/pppd/utils.c index 5c9ba64..2cc0e91 100644 --- a/pppd/utils.c +++ b/pppd/utils.c @@ -59,7 +59,6 @@ #include "fsm.h" #include "lcp.h" -static const char rcsid[] = RCSID; #if defined(SUNOS4) extern char *strerror(); @@ -286,19 +285,6 @@ vslprintf(buf, buflen, fmt, args) (ip >> 16) & 0xff, (ip >> 8) & 0xff, ip & 0xff); str = num; break; -#if 0 /* not used, and breaks on S/390, apparently */ - case 'r': - f = va_arg(args, char *); -#ifndef __powerpc__ - n = vslprintf(buf, buflen + 1, f, va_arg(args, va_list)); -#else - /* On the powerpc, a va_list is an array of 1 structure */ - n = vslprintf(buf, buflen + 1, f, va_arg(args, void *)); -#endif - buf += n; - buflen -= n; - continue; -#endif case 't': time(&t); str = ctime(&t); @@ -309,12 +295,15 @@ vslprintf(buf, buflen, fmt, args) case 'q': /* quoted string */ quoted = c == 'q'; p = va_arg(args, unsigned char *); + if (p == NULL) + p = (unsigned char *)""; if (fillch == '0' && prec >= 0) { n = prec; } else { - n = strlen((char *)p); - if (prec >= 0 && n > prec) - n = prec; + if (prec == -1) + n = strlen((char *)p); + else + n = strnlen((char *)p, prec); } while (n > 0 && buflen > 0) { c = *p++; @@ -397,9 +386,10 @@ vslprintf(buf, buflen, fmt, args) } len = num + sizeof(num) - 1 - str; } else { - len = strlen(str); - if (prec >= 0 && len > prec) - len = prec; + if (prec == -1) + len = strlen(str); + else + len = strnlen(str, prec); } if (width > 0) { if (width > buflen) @@ -636,7 +626,7 @@ print_string(p, len, printer, arg) printer(arg, "\\t"); break; default: - printer(arg, "\\%.3o", c); + printer(arg, "\\%.3o", (unsigned char) c); } } } @@ -652,10 +642,9 @@ logit(level, fmt, args) char *fmt; va_list args; { - int n; char buf[1024]; - n = vslprintf(buf, sizeof(buf), fmt, args); + vslprintf(buf, sizeof(buf), fmt, args); log_write(level, buf); }