/*
- * Copyright (c) 1999-2005, 2008, 2010-2011
+ * Copyright (c) 1999-2005, 2008, 2010-2013
* Todd C. Miller <Todd.Miller@courtesan.com>
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
#include <config.h>
+#if !defined(HAVE_VSNPRINTF) || !defined(HAVE_SNPRINTF) || !defined(HAVE_VASPRINTF) || !defined(HAVE_ASPRINTF)
+
#include <sys/types.h>
-#include <sys/param.h>
#include <stdio.h>
#ifdef STDC_HEADERS
# include <stdlib.h>
# endif
#endif /* STDC_HEADERS */
-#ifdef HAVE_STDINT_H
+#if defined(HAVE_STDINT_H)
# include <stdint.h>
+#elif defined(HAVE_INTTYPES_H)
+# include <inttypes.h>
#endif
#ifdef HAVE_STRING_H
# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS)
#define LADJUST 0x004 /* left adjustment */
#define LONGDBL 0x008 /* long double; unimplemented */
#define LONGINT 0x010 /* long integer */
-#define QUADINT 0x020 /* quad integer */
+#define LLONGINT 0x020 /* quad integer */
#define SHORTINT 0x040 /* short integer */
#define ZEROPAD 0x080 /* zero (as opposed to blank) pad */
flags |= SHORTINT;
goto rflag;
case 'l':
- flags |= LONGINT;
+ if (*fmt == 'l') {
+ fmt++;
+ flags |= LLONGINT;
+ } else {
+ flags |= LONGINT;
+ }
goto rflag;
#ifdef HAVE_LONG_LONG_INT
case 'q':
- flags |= QUADINT;
+ flags |= LLONGINT;
goto rflag;
#endif /* HAVE_LONG_LONG_INT */
case 'c':
case 'd':
case 'i':
#ifdef HAVE_LONG_LONG_INT
- if (flags & QUADINT) {
+ if (flags & LLONGINT) {
uqval = va_arg(ap, long long);
if ((long long)uqval < 0) {
uqval = -uqval;
goto number;
case 'n':
#ifdef HAVE_LONG_LONG_INT
- if (flags & QUADINT)
+ if (flags & LLONGINT)
*va_arg(ap, long long *) = ret;
else
#endif /* HAVE_LONG_LONG_INT */
/*FALLTHROUGH*/
case 'o':
#ifdef HAVE_LONG_LONG_INT
- if (flags & QUADINT)
+ if (flags & LLONGINT)
uqval = va_arg(ap, unsigned long long);
else
#endif /* HAVE_LONG_LONG_INT */
ulval = (unsigned long)va_arg(ap, void *);
base = 16;
xdigs = "0123456789abcdef";
- flags = (flags & ~QUADINT) | HEXPREFIX;
+ flags = (flags & ~LLONGINT) | HEXPREFIX;
ch = 'x';
goto nosign;
case 's':
/*FALLTHROUGH*/
case 'u':
#ifdef HAVE_LONG_LONG_INT
- if (flags & QUADINT)
+ if (flags & LLONGINT)
uqval = va_arg(ap, unsigned long long);
else
#endif /* HAVE_LONG_LONG_INT */
xdigs = "0123456789abcdef";
hex:
#ifdef HAVE_LONG_LONG_INT
- if (flags & QUADINT)
+ if (flags & LLONGINT)
uqval = va_arg(ap, unsigned long long);
else
#endif /* HAVE_LONG_LONG_INT */
/* leading 0x/X only if non-zero */
if (flags & ALT &&
#ifdef HAVE_LONG_LONG_INT
- (flags & QUADINT ? uqval != 0 : ulval != 0))
+ (flags & LLONGINT ? uqval != 0 : ulval != 0))
#else
ulval != 0)
#endif /* HAVE_LONG_LONG_INT */
*/
cp = buf + BUF;
#ifdef HAVE_LONG_LONG_INT
- if (flags & QUADINT) {
+ if (flags & LLONGINT) {
if (uqval != 0 || prec != 0)
cp = __uqtoa(uqval, cp, base,
flags & ALT, xdigs);
return ret;
}
#endif /* HAVE_ASPRINTF */
+
+#endif /* !HAVE_VSNPRINTF || !HAVE_SNPRINTF || !HAVE_VASPRINTF || !HAVE_ASPRINTF */