X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=snprintf.c;h=4123a9d77464fcc8ea6c0ff0e94a65372b50816f;hb=bf31775618b964a8228b10f8cf004541cb7b0ce7;hp=4b7b2b52f3ae5c8d2af122b8c95462b17d92a98d;hpb=a922b9e5432b28b092428393180b1a2c2569f708;p=debian%2Fsudo diff --git a/snprintf.c b/snprintf.c index 4b7b2b5..4123a9d 100644 --- a/snprintf.c +++ b/snprintf.c @@ -1,5 +1,6 @@ /* - * Copyright (c) 1999-2005 Todd C. Miller + * Copyright (c) 1999-2005, 2008, 2010 + * Todd C. Miller * Copyright (c) 1990, 1993 * The Regents of the University of California. All rights reserved. * @@ -52,16 +53,18 @@ # include # endif #endif /* STDC_HEADERS */ +#ifdef HAVE_STDINT_H +# include +#endif #ifdef HAVE_STRING_H # if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) # include # endif # include -#else -# ifdef HAVE_STRINGS_H -# include -# endif #endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ #if defined(HAVE_MALLOC_H) && !defined(STDC_HEADERS) # include #endif /* HAVE_MALLOC_H && !STDC_HEADERS */ @@ -75,10 +78,6 @@ #include -#ifndef lint -__unused static const char rcsid[] = "$Sudo: snprintf.c,v 1.14.4.2 2007/06/12 01:28:42 millert Exp $"; -#endif /* lint */ - static int xxxprintf __P((char **, size_t, int, const char *, va_list)); /* @@ -90,22 +89,22 @@ static int xxxprintf __P((char **, size_t, int, const char *, va_list)); #ifndef LONG_MAX # define LONG_MAX (ULONG_MAX / 2) #endif -#ifdef HAVE_LONG_LONG -# ifndef UQUAD_MAX -# ifdef ULONG_LONG_MAX -# define UQUAD_MAX ULONG_LONG_MAX +#ifdef HAVE_LONG_LONG_INT +# ifndef ULLONG_MAX +# ifdef UQUAD_MAX +# define ULLONG_MAX UQUAD_MAX # else -# define UQUAD_MAX ((unsigned long long)-1) +# define ULLONG_MAX ((unsigned long long)-1) # endif # endif -# ifndef QUAD_MAX -# ifdef LONG_LONG_MAX -# define QUAD_MAX LONG_LONG_MAX +# ifndef LLONG_MAX +# ifdef QUAD_MAX +# define LLONG_MAX QUAD_MAX # else -# define QUAD_MAX (UQUAD_MAX / 2) +# define LLONG_MAX (ULLONG_MAX / 2) # endif # endif -#endif /* HAVE_LONG_LONG */ +#endif /* HAVE_LONG_LONG_INT */ /* * Macros for converting digits to letters and vice versa @@ -129,9 +128,9 @@ static int xxxprintf __P((char **, size_t, int, const char *, va_list)); #define BUF 68 #ifndef HAVE_MEMCHR -VOID * +void * memchr(s, c, n) - const VOID *s; + const void *s; unsigned char c; size_t n; { @@ -140,7 +139,7 @@ memchr(s, c, n) do { if (*p++ == c) - return ((VOID *)(p - 1)); + return ((void *)(p - 1)); } while (--n != 0); } return (NULL); @@ -213,8 +212,8 @@ __ultoa(val, endp, base, octzero, xdigs) } /* Identical to __ultoa, but for quads. */ -#ifdef HAVE_LONG_LONG -# ifdef LONG_IS_QUAD +#ifdef HAVE_LONG_LONG_INT +# if SIZEOF_LONG_INT == 8 # define __uqtoa(v, e, b, o, x) __ultoa((unsigned long)(v), (e), (b), (o), (x)) # else static char * @@ -237,7 +236,7 @@ __uqtoa(val, endp, base, octzero, xdigs) *--cp = to_char(val % 10); return (cp); } - if (val > QUAD_MAX) { + if (val > LLONG_MAX) { *--cp = to_char(val % 10); sval = val / 10; } else @@ -269,8 +268,8 @@ __uqtoa(val, endp, base, octzero, xdigs) } return (cp); } -# endif /* !LONG_IS_QUAD */ -#endif /* HAVE_LONG_LONG */ +# endif /* !SIZEOF_LONG_INT */ +#endif /* HAVE_LONG_LONG_INT */ /* * Actual printf innards. @@ -293,7 +292,7 @@ xxxprintf(strp, strsize, alloc, fmt0, ap) int prec; /* precision from format (%.3d), or -1 */ char sign; /* sign prefix (' ', '+', '-', or \0) */ unsigned long ulval; /* integer arguments %[diouxX] */ -#ifdef HAVE_LONG_LONG +#ifdef HAVE_LONG_LONG_INT unsigned long long uqval; /* %q (quad) integers */ #endif int base; /* base for [diouxX] conversion */ @@ -470,11 +469,11 @@ reswitch: switch (ch) { case 'l': flags |= LONGINT; goto rflag; -#ifdef HAVE_LONG_LONG +#ifdef HAVE_LONG_LONG_INT case 'q': flags |= QUADINT; goto rflag; -#endif /* HAVE_LONG_LONG */ +#endif /* HAVE_LONG_LONG_INT */ case 'c': *(cp = buf) = va_arg(ap, int); size = 1; @@ -485,7 +484,7 @@ reswitch: switch (ch) { /*FALLTHROUGH*/ case 'd': case 'i': -#ifdef HAVE_LONG_LONG +#ifdef HAVE_LONG_LONG_INT if (flags & QUADINT) { uqval = va_arg(ap, long long); if ((long long)uqval < 0) { @@ -494,7 +493,7 @@ reswitch: switch (ch) { } } else -#endif /* HAVE_LONG_LONG */ +#endif /* HAVE_LONG_LONG_INT */ { ulval = SARG(); if ((long)ulval < 0) { @@ -505,11 +504,11 @@ reswitch: switch (ch) { base = 10; goto number; case 'n': -#ifdef HAVE_LONG_LONG +#ifdef HAVE_LONG_LONG_INT if (flags & QUADINT) *va_arg(ap, long long *) = ret; else -#endif /* HAVE_LONG_LONG */ +#endif /* HAVE_LONG_LONG_INT */ if (flags & LONGINT) *va_arg(ap, long *) = ret; else if (flags & SHORTINT) @@ -521,11 +520,11 @@ reswitch: switch (ch) { flags |= LONGINT; /*FALLTHROUGH*/ case 'o': -#ifdef HAVE_LONG_LONG +#ifdef HAVE_LONG_LONG_INT if (flags & QUADINT) uqval = va_arg(ap, unsigned long long); else -#endif /* HAVE_LONG_LONG */ +#endif /* HAVE_LONG_LONG_INT */ ulval = UARG(); base = 8; goto nosign; @@ -537,7 +536,7 @@ reswitch: switch (ch) { * defined manner.'' * -- ANSI X3J11 */ - ulval = (unsigned long)va_arg(ap, VOID *); + ulval = (unsigned long)va_arg(ap, void *); base = 16; xdigs = "0123456789abcdef"; flags = (flags & ~QUADINT) | HEXPREFIX; @@ -568,11 +567,11 @@ reswitch: switch (ch) { flags |= LONGINT; /*FALLTHROUGH*/ case 'u': -#ifdef HAVE_LONG_LONG +#ifdef HAVE_LONG_LONG_INT if (flags & QUADINT) uqval = va_arg(ap, unsigned long long); else -#endif /* HAVE_LONG_LONG */ +#endif /* HAVE_LONG_LONG_INT */ ulval = UARG(); base = 10; goto nosign; @@ -582,20 +581,20 @@ reswitch: switch (ch) { case 'x': xdigs = "0123456789abcdef"; hex: -#ifdef HAVE_LONG_LONG +#ifdef HAVE_LONG_LONG_INT if (flags & QUADINT) uqval = va_arg(ap, unsigned long long); else -#endif /* HAVE_LONG_LONG */ +#endif /* HAVE_LONG_LONG_INT */ ulval = UARG(); base = 16; /* leading 0x/X only if non-zero */ if (flags & ALT && -#ifdef HAVE_LONG_LONG +#ifdef HAVE_LONG_LONG_INT (flags & QUADINT ? uqval != 0 : ulval != 0)) #else ulval != 0) -#endif /* HAVE_LONG_LONG */ +#endif /* HAVE_LONG_LONG_INT */ flags |= HEXPREFIX; /* unsigned conversions */ @@ -614,14 +613,14 @@ number: if ((dprec = prec) >= 0) * -- ANSI X3J11 */ cp = buf + BUF; -#ifdef HAVE_LONG_LONG +#ifdef HAVE_LONG_LONG_INT if (flags & QUADINT) { if (uqval != 0 || prec != 0) cp = __uqtoa(uqval, cp, base, flags & ALT, xdigs); } else -#endif /* HAVE_LONG_LONG */ +#endif /* HAVE_LONG_LONG_INT */ { if (ulval != 0 || prec != 0) cp = __ultoa(ulval, cp, base,