[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
YAPPP: yet another *printf portability problem
From: |
Bruno Haible |
Subject: |
YAPPP: yet another *printf portability problem |
Date: |
Sun, 4 Nov 2007 17:19:20 +0100 |
User-agent: |
KMail/1.5.4 |
The test cases for large precisions, meant to uncover out-of-memory handling
problems, also uncovered another problem:
- On mingw, precisions larger than 512 are capped, i.e. treated like if
they were 512. So, you ask for 2000 digits, you get 512 digits.
- On BeOS, precisions larger than 1044 even crash the program. The odd
value of this limit suggests that it's a buffer overflow of a buffer of
size 1024.
POSIX imposes no limit on the possible precisions. ISO C 99 does not do either,
but mentions another limit in 7.19.6.1.(15):
"The number of characters that can be produced by any single conversion shall
be at least 4095."
So the behaviour of mingw and BeOS is not POSIX and not ISO C compliant.
I'm adding a workaround to gnulib.
2007-11-04 Bruno Haible <address@hidden>
Fix *printf behaviour for large precisions on mingw and BeOS.
* m4/printf.m4 (gl_PRINTF_PRECISION): New macro.
* lib/vasnprintf.c (VASNPRINTF): Handle NEED_PRINTF_UNBOUNDED_PRECISION.
* m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF_PRECISION): New macro.
(gl_PREREQ_VASNPRINTF_WITH_EXTRAS): Invoke it.
* m4/fprintf-posix.m4 (gl_FUNC_FPRINTF_POSIX): Invoke
gl_PRINTF_PRECISION and test its result. Invoke
gl_PREREQ_VASNPRINTF_PRECISION.
* m4/snprintf-posix.m4 (gl_FUNC_SNPRINTF_POSIX): Likewise.
* m4/sprintf-posix.m4 (gl_FUNC_SPRINTF_POSIX): Likewise.
* m4/vasnprintf-posix.m4 (gl_FUNC_VASNPRINTF_POSIX): Likewise.
* m4/vasprintf-posix.m4 (gl_FUNC_VASPRINTF_POSIX): Likewise.
* m4/vfprintf-posix.m4 (gl_FUNC_VFPRINTF_POSIX): Likewise.
* m4/vsnprintf-posix.m4 (gl_FUNC_VSNPRINTF_POSIX): Likewise.
* m4/vsprintf-posix.m4 (gl_FUNC_VSPRINTF_POSIX): Likewise.
* doc/functions/fprintf.texi: Update.
* doc/functions/printf.texi: Update.
* doc/functions/snprintf.texi: Update.
* doc/functions/sprintf.texi: Update.
* doc/functions/vfprintf.texi: Update.
* doc/functions/vprintf.texi: Update.
* doc/functions/vsnprintf.texi: Update.
* doc/functions/vsprintf.texi: Update.
*** doc/functions/fprintf.texi.orig 2007-11-04 17:05:18.000000000 +0100
--- doc/functions/fprintf.texi 2007-11-04 16:48:08.000000000 +0100
***************
*** 38,43 ****
--- 38,47 ----
with zeroes) on some platforms:
MacOS X 10.3, FreeBSD 6.0, NetBSD 3.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris
10, Cygwin 2007, mingw.
@item
+ This function does not support precisions larger than 512 or 1024 in integer,
+ floating-point and pointer output on some platforms:
+ mingw, BeOS.
+ @item
This function can crash in out-of-memory conditions on some platforms:
MacOS X 10.3, FreeBSD 6.0, NetBSD 3.0.
@end itemize
*** doc/functions/printf.texi.orig 2007-11-04 17:05:18.000000000 +0100
--- doc/functions/printf.texi 2007-11-04 16:48:05.000000000 +0100
***************
*** 38,43 ****
--- 38,47 ----
with zeroes) on some platforms:
MacOS X 10.3, FreeBSD 6.0, NetBSD 3.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris
10, Cygwin 2007, mingw.
@item
+ This function does not support precisions larger than 512 or 1024 in integer,
+ floating-point and pointer output on some platforms:
+ mingw, BeOS.
+ @item
This function can crash in out-of-memory conditions on some platforms:
MacOS X 10.3, FreeBSD 6.0, NetBSD 3.0.
@end itemize
*** doc/functions/snprintf.texi.orig 2007-11-04 17:05:18.000000000 +0100
--- doc/functions/snprintf.texi 2007-11-04 16:48:10.000000000 +0100
***************
*** 45,50 ****
--- 45,54 ----
with zeroes) on some platforms:
MacOS X 10.3, FreeBSD 6.0, NetBSD 3.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris
10, Cygwin 2007, mingw.
@item
+ This function does not support precisions larger than 512 or 1024 in integer,
+ floating-point and pointer output on some platforms:
+ mingw, BeOS.
+ @item
This function can crash in out-of-memory conditions on some platforms:
MacOS X 10.3, FreeBSD 6.0, NetBSD 3.0.
@item
*** doc/functions/sprintf.texi.orig 2007-11-04 17:05:18.000000000 +0100
--- doc/functions/sprintf.texi 2007-11-04 16:48:15.000000000 +0100
***************
*** 38,43 ****
--- 38,47 ----
with zeroes) on some platforms:
MacOS X 10.3, FreeBSD 6.0, NetBSD 3.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris
10, Cygwin 2007, mingw.
@item
+ This function does not support precisions larger than 512 or 1024 in integer,
+ floating-point and pointer output on some platforms:
+ mingw, BeOS.
+ @item
This function can crash in out-of-memory conditions on some platforms:
MacOS X 10.3, FreeBSD 6.0, NetBSD 3.0.
@end itemize
*** doc/functions/vfprintf.texi.orig 2007-11-04 17:05:18.000000000 +0100
--- doc/functions/vfprintf.texi 2007-11-04 16:48:13.000000000 +0100
***************
*** 38,43 ****
--- 38,47 ----
with zeroes) on some platforms:
MacOS X 10.3, FreeBSD 6.0, NetBSD 3.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris
10, Cygwin 2007, mingw.
@item
+ This function does not support precisions larger than 512 or 1024 in integer,
+ floating-point and pointer output on some platforms:
+ mingw, BeOS.
+ @item
This function can crash in out-of-memory conditions on some platforms:
MacOS X 10.3, FreeBSD 6.0, NetBSD 3.0.
@end itemize
*** doc/functions/vprintf.texi.orig 2007-11-04 17:05:19.000000000 +0100
--- doc/functions/vprintf.texi 2007-11-04 16:48:20.000000000 +0100
***************
*** 38,43 ****
--- 38,47 ----
with zeroes) on some platforms:
MacOS X 10.3, FreeBSD 6.0, NetBSD 3.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris
10, Cygwin 2007, mingw.
@item
+ This function does not support precisions larger than 512 or 1024 in integer,
+ floating-point and pointer output on some platforms:
+ mingw, BeOS.
+ @item
This function can crash in out-of-memory conditions on some platforms:
MacOS X 10.3, FreeBSD 6.0, NetBSD 3.0.
@end itemize
*** doc/functions/vsnprintf.texi.orig 2007-11-04 17:05:19.000000000 +0100
--- doc/functions/vsnprintf.texi 2007-11-04 16:48:18.000000000 +0100
***************
*** 45,50 ****
--- 45,54 ----
with zeroes) on some platforms:
MacOS X 10.3, FreeBSD 6.0, NetBSD 3.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris
10, Cygwin 2007, mingw.
@item
+ This function does not support precisions larger than 512 or 1024 in integer,
+ floating-point and pointer output on some platforms:
+ mingw, BeOS.
+ @item
This function can crash in out-of-memory conditions on some platforms:
MacOS X 10.3, FreeBSD 6.0, NetBSD 3.0.
@item
*** doc/functions/vsprintf.texi.orig 2007-11-04 17:05:19.000000000 +0100
--- doc/functions/vsprintf.texi 2007-11-04 16:48:22.000000000 +0100
***************
*** 38,43 ****
--- 38,47 ----
with zeroes) on some platforms:
MacOS X 10.3, FreeBSD 6.0, NetBSD 3.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris
10, Cygwin 2007, mingw.
@item
+ This function does not support precisions larger than 512 or 1024 in integer,
+ floating-point and pointer output on some platforms:
+ mingw, BeOS.
+ @item
This function can crash in out-of-memory conditions on some platforms:
MacOS X 10.3, FreeBSD 6.0, NetBSD 3.0.
@end itemize
*** lib/vasnprintf.c.orig 2007-11-04 17:05:19.000000000 +0100
--- lib/vasnprintf.c 2007-11-04 16:51:25.000000000 +0100
***************
*** 3540,3550 ****
{
arg_type type = a.arg[dp->arg_index].type;
int flags = dp->flags;
! #if !USE_SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO ||
NEED_PRINTF_FLAG_ZERO
int has_width;
size_t width;
#endif
! #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO
int pad_ourselves;
#else
# define pad_ourselves 0
--- 3540,3559 ----
{
arg_type type = a.arg[dp->arg_index].type;
int flags = dp->flags;
! #if !USE_SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO ||
NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
int has_width;
size_t width;
#endif
! #if !USE_SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION
! int has_precision;
! size_t precision;
! #endif
! #if NEED_PRINTF_UNBOUNDED_PRECISION
! int prec_ourselves;
! #else
! # define prec_ourselves 0
! #endif
! #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO ||
NEED_PRINTF_UNBOUNDED_PRECISION
int pad_ourselves;
#else
# define pad_ourselves 0
***************
*** 3558,3564 ****
TCHAR_T *tmp;
#endif
! #if !USE_SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO ||
NEED_PRINTF_FLAG_ZERO
has_width = 0;
width = 0;
if (dp->width_start != dp->width_end)
--- 3567,3573 ----
TCHAR_T *tmp;
#endif
! #if !USE_SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO ||
NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
has_width = 0;
width = 0;
if (dp->width_start != dp->width_end)
***************
*** 3592,3625 ****
}
#endif
#if !USE_SNPRINTF
/* Allocate a temporary buffer of sufficient size for calling
sprintf. */
{
- size_t precision;
-
- precision = 6;
- if (dp->precision_start != dp->precision_end)
- {
- if (dp->precision_arg_index != ARG_NONE)
- {
- int arg;
-
- if (!(a.arg[dp->precision_arg_index].type ==
TYPE_INT))
- abort ();
- arg = a.arg[dp->precision_arg_index].a.a_int;
- precision = (arg < 0 ? 0 : arg);
- }
- else
- {
- const FCHAR_T *digitp = dp->precision_start + 1;
-
- precision = 0;
- while (digitp != dp->precision_end)
- precision = xsum (xtimes (precision, 10), *digitp++
- '0');
- }
- }
-
switch (dp->conversion)
{
--- 3601,3642 ----
}
#endif
+ #if !USE_SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION
+ has_precision = 0;
+ precision = 6;
+ if (dp->precision_start != dp->precision_end)
+ {
+ if (dp->precision_arg_index != ARG_NONE)
+ {
+ int arg;
+
+ if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+ abort ();
+ arg = a.arg[dp->precision_arg_index].a.a_int;
+ /* "A negative precision is taken as if the precision
+ were omitted." */
+ if (arg >= 0)
+ {
+ precision = arg;
+ has_precision = 1;
+ }
+ }
+ else
+ {
+ const FCHAR_T *digitp = dp->precision_start + 1;
+
+ precision = 0;
+ while (digitp != dp->precision_end)
+ precision = xsum (xtimes (precision, 10), *digitp++ -
'0');
+ has_precision = 1;
+ }
+ }
+ #endif
+
#if !USE_SNPRINTF
/* Allocate a temporary buffer of sufficient size for calling
sprintf. */
{
switch (dp->conversion)
{
***************
*** 3824,3831 ****
}
#endif
/* Decide whether to perform the padding ourselves. */
! #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO
switch (dp->conversion)
{
# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO
--- 3841,3863 ----
}
#endif
+ /* Decide whether to handle the precision ourselves. */
+ #if NEED_PRINTF_UNBOUNDED_PRECISION
+ switch (dp->conversion)
+ {
+ case 'd': case 'i': case 'u':
+ case 'o':
+ case 'x': case 'X': case 'p':
+ prec_ourselves = has_precision && (precision > 0);
+ break;
+ default:
+ prec_ourselves = 0;
+ break;
+ }
+ #endif
+
/* Decide whether to perform the padding ourselves. */
! #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO ||
NEED_PRINTF_UNBOUNDED_PRECISION
switch (dp->conversion)
{
# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO
***************
*** 3842,3848 ****
pad_ourselves = 1;
break;
default:
! pad_ourselves = 0;
break;
}
#endif
--- 3874,3880 ----
pad_ourselves = 1;
break;
default:
! pad_ourselves = prec_ourselves;
break;
}
#endif
***************
*** 3890,3911 ****
}
}
}
! if (dp->precision_start != dp->precision_end)
{
! size_t n = dp->precision_end - dp->precision_start;
! /* The precision specification is known to consist only
! of standard ASCII characters. */
! if (sizeof (FCHAR_T) == sizeof (TCHAR_T))
{
! memcpy (fbp, dp->precision_start, n * sizeof (TCHAR_T));
! fbp += n;
! }
! else
! {
! const FCHAR_T *mp = dp->precision_start;
! do
! *fbp++ = (unsigned char) *mp++;
! while (--n > 0);
}
}
--- 3922,3946 ----
}
}
}
! if (!prec_ourselves)
{
! if (dp->precision_start != dp->precision_end)
{
! size_t n = dp->precision_end - dp->precision_start;
! /* The precision specification is known to consist only
! of standard ASCII characters. */
! if (sizeof (FCHAR_T) == sizeof (TCHAR_T))
! {
! memcpy (fbp, dp->precision_start, n * sizeof
(TCHAR_T));
! fbp += n;
! }
! else
! {
! const FCHAR_T *mp = dp->precision_start;
! do
! *fbp++ = (unsigned char) *mp++;
! while (--n > 0);
! }
}
}
***************
*** 4252,4257 ****
--- 4287,4355 ----
}
#endif
+ #if NEED_PRINTF_UNBOUNDED_PRECISION
+ if (prec_ourselves)
+ {
+ /* Handle the precision. */
+ TCHAR_T *prec_ptr =
+ # if USE_SNPRINTF
+ (TCHAR_T *) (result + length);
+ # else
+ tmp;
+ # endif
+ size_t prefix_count;
+ size_t move;
+
+ prefix_count = 0;
+ /* Put the additional zeroes after the sign. */
+ if (count >= 1
+ && (*prec_ptr == '-' || *prec_ptr == '+'
+ || *prec_ptr == ' '))
+ prefix_count = 1;
+ /* Put the additional zeroes after the 0x prefix if
+ (flags & FLAG_ALT) || (dp->conversion == 'p'). */
+ else if (count >= 2
+ && prec_ptr[0] == '0'
+ && (prec_ptr[1] == 'x' || prec_ptr[1] == 'X'))
+ prefix_count = 2;
+
+ move = count - prefix_count;
+ if (precision > move)
+ {
+ /* Insert zeroes. */
+ size_t insert = precision - move;
+ TCHAR_T *prec_end;
+
+ # if USE_SNPRINTF
+ size_t n =
+ xsum (length,
+ (count + insert + TCHARS_PER_DCHAR - 1)
+ / TCHARS_PER_DCHAR);
+ length += (count + TCHARS_PER_DCHAR - 1) /
TCHARS_PER_DCHAR;
+ ENSURE_ALLOCATION (n);
+ length -= (count + TCHARS_PER_DCHAR - 1) /
TCHARS_PER_DCHAR;
+ prec_ptr = (TCHAR_T *) (result + length);
+ # endif
+
+ prec_end = prec_ptr + count;
+ prec_ptr += prefix_count;
+
+ while (prec_end > prec_ptr)
+ {
+ prec_end--;
+ prec_end[insert] = prec_end[0];
+ }
+
+ prec_end += insert;
+ do
+ *--prec_end = '0';
+ while (prec_end > prec_ptr);
+
+ count += insert;
+ }
+ }
+ #endif
+
#if !DCHAR_IS_TCHAR
# if !USE_SNPRINTF
if (count >= tmp_length)
***************
*** 4360,4366 ****
/* Here count <= allocated - length. */
/* Perform padding. */
! #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO
if (pad_ourselves && has_width)
{
size_t w;
--- 4458,4464 ----
/* Here count <= allocated - length. */
/* Perform padding. */
! #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO ||
NEED_PRINTF_UNBOUNDED_PRECISION
if (pad_ourselves && has_width)
{
size_t w;
*** m4/fprintf-posix.m4.orig 2007-11-04 17:05:19.000000000 +0100
--- m4/fprintf-posix.m4 2007-11-04 15:29:40.000000000 +0100
***************
*** 1,4 ****
! # fprintf-posix.m4 serial 8
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
--- 1,4 ----
! # fprintf-posix.m4 serial 9
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
***************
*** 17,22 ****
--- 17,23 ----
AC_REQUIRE([gl_PRINTF_POSITIONS])
AC_REQUIRE([gl_PRINTF_FLAG_GROUPING])
AC_REQUIRE([gl_PRINTF_FLAG_ZERO])
+ AC_REQUIRE([gl_PRINTF_PRECISION])
AC_REQUIRE([gl_PRINTF_ENOMEM])
gl_cv_func_fprintf_posix=no
case "$gl_cv_func_printf_sizes_c99" in
***************
*** 39,49 ****
*yes)
case "$gl_cv_func_printf_flag_zero" in
*yes)
! case "$gl_cv_func_printf_enomem" in
*yes)
! # fprintf exists and is already
! # POSIX compliant.
! gl_cv_func_fprintf_posix=yes
;;
esac
;;
--- 40,54 ----
*yes)
case "$gl_cv_func_printf_flag_zero" in
*yes)
! case "$gl_cv_func_printf_precision"
in
*yes)
! case
"$gl_cv_func_printf_enomem" in
! *yes)
! # fprintf exists and is
! # already POSIX compliant.
! gl_cv_func_fprintf_posix=yes
! ;;
! esac
;;
esac
;;
***************
*** 74,79 ****
--- 79,85 ----
gl_PREREQ_VASNPRINTF_DIRECTIVE_F
gl_PREREQ_VASNPRINTF_FLAG_GROUPING
gl_PREREQ_VASNPRINTF_FLAG_ZERO
+ gl_PREREQ_VASNPRINTF_PRECISION
gl_PREREQ_VASNPRINTF_ENOMEM
gl_REPLACE_VASNPRINTF
gl_REPLACE_FPRINTF
*** m4/printf.m4.orig 2007-11-04 17:05:19.000000000 +0100
--- m4/printf.m4 2007-11-04 16:57:41.000000000 +0100
***************
*** 1,4 ****
! # printf.m4 serial 18
dnl Copyright (C) 2003, 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
--- 1,4 ----
! # printf.m4 serial 19
dnl Copyright (C) 2003, 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
***************
*** 721,726 ****
--- 721,766 ----
])
])
+ dnl Test whether the *printf family of functions supports large precisions.
+ dnl On mingw, precisions larger than 512 are treated like 512, in integer,
+ dnl floating-point or pointer output. On BeOS, precisions larger than 1044
+ dnl crash the program.
+ dnl Result is gl_cv_func_printf_precision.
+
+ AC_DEFUN([gl_PRINTF_PRECISION],
+ [
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CACHE_CHECK([whether printf supports large precisions],
+ [gl_cv_func_printf_precision],
+ [
+ AC_TRY_RUN([
+ #include <stdio.h>
+ #include <string.h>
+ static char buf[5000];
+ int main ()
+ {
+ #ifdef __BEOS__
+ /* On BeOS, this would crash and show a dialog box. Avoid the crash. */
+ return 1;
+ #endif
+ if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3)
+ return 1;
+ return 0;
+ }], [gl_cv_func_printf_precision=yes], [gl_cv_func_printf_precision=no],
+ [
+ changequote(,)dnl
+ case "$host_os" in
+ # Guess no only on native Win32 and BeOS systems.
+ mingw* | pw*) gl_cv_func_printf_precision="guessing no" ;;
+ beos*) gl_cv_func_printf_precision="guessing no" ;;
+ *) gl_cv_func_printf_precision="guessing yes" ;;
+ esac
+ changequote([,])dnl
+ ])
+ ])
+ ])
+
dnl Test whether the *printf family of functions recovers gracefully in case
dnl of an out-of-memory condition, or whether it crashes the entire program.
dnl Result is gl_cv_func_printf_enomem.
***************
*** 1142,1153 ****
dnl 8 = gl_PRINTF_POSITIONS
dnl 9 = gl_PRINTF_FLAG_GROUPING
dnl 10 = gl_PRINTF_FLAG_ZERO
! dnl 11 = gl_PRINTF_ENOMEM
! dnl 12 = gl_SNPRINTF_PRESENCE
! dnl 13 = gl_SNPRINTF_TRUNCATION_C99
! dnl 14 = gl_SNPRINTF_RETVAL_C99
! dnl 15 = gl_SNPRINTF_DIRECTIVE_N
! dnl 16 = gl_VSNPRINTF_ZEROSIZE_C99
dnl
dnl 1 = checking whether printf supports size specifiers as in C99...
dnl 2 = checking whether printf supports 'long double' arguments...
--- 1182,1194 ----
dnl 8 = gl_PRINTF_POSITIONS
dnl 9 = gl_PRINTF_FLAG_GROUPING
dnl 10 = gl_PRINTF_FLAG_ZERO
! dnl 11 = gl_PRINTF_PRECISION
! dnl 12 = gl_PRINTF_ENOMEM
! dnl 13 = gl_SNPRINTF_PRESENCE
! dnl 14 = gl_SNPRINTF_TRUNCATION_C99
! dnl 15 = gl_SNPRINTF_RETVAL_C99
! dnl 16 = gl_SNPRINTF_DIRECTIVE_N
! dnl 17 = gl_VSNPRINTF_ZEROSIZE_C99
dnl
dnl 1 = checking whether printf supports size specifiers as in C99...
dnl 2 = checking whether printf supports 'long double' arguments...
***************
*** 1159,1192 ****
dnl 8 = checking whether printf supports POSIX/XSI format strings with
positions...
dnl 9 = checking whether printf supports the grouping flag...
dnl 10 = checking whether printf supports the zero flag correctly...
! dnl 11 = checking whether printf survives out-of-memory conditions...
! dnl 12 = checking for snprintf...
! dnl 13 = checking whether snprintf truncates the result as in C99...
! dnl 14 = checking whether snprintf returns a byte count as in C99...
! dnl 15 = checking whether snprintf fully supports the 'n' directive...
! dnl 16 = checking whether vsnprintf respects a zero size as in C99...
dnl
dnl . = yes, # = no.
dnl
! dnl 1 2 3 4 5 6 7 8 9 10 11 12 13 14
15 16
! dnl glibc 2.5 . . . . . . . . . . . . . .
. .
! dnl glibc 2.3.6 . . . . # . . . . . . . . .
. .
! dnl FreeBSD 5.4, 6.1 . . . . # . . . . # # . . .
. .
! dnl MacOS X 10.3.9 . . . . # . . . . # # . . .
. .
! dnl OpenBSD 3.9, 4.0 . ? ? ? # ? . . ? ? ? . . .
? ?
! dnl Cygwin 2007 (= Cygwin 1.5.24) . . . . # # . . . # ? . . .
. .
! dnl Cygwin 2006 (= Cygwin 1.5.19) # . . . # # . . # # ? . . .
. .
! dnl Solaris 10 . . # # # . . . . # . . . .
. .
! dnl Solaris 2.6 ... 9 # . # # # # . . . # . . . .
. .
! dnl Solaris 2.5.1 # . # # # # . . . # . # # #
# #
! dnl AIX 5.2 . . # # # . . . . # . . . .
. .
! dnl AIX 4.3.2, 5.1 # . # # # # . . . # . . . .
. .
! dnl HP-UX 11.31 . . . . # . . . . # . . . #
# .
! dnl HP-UX 10.20, 11.{00,11,23} # . . . # # . . . # . . . #
# #
! dnl IRIX 6.5 # . # # # # . . . # . . . #
. .
! dnl OSF/1 5.1 # . # # # # . . . # . . . #
. #
! dnl OSF/1 4.0d # . # # # # . . . # . # # #
# #
! dnl NetBSD 4.0 . ? ? ? ? ? . . ? ? ? . . .
? ?
! dnl NetBSD 3.0 . . . . # # . # # # # . . .
. .
! dnl BeOS # # . # # # . # . . ? . . .
. .
! dnl mingw # # # # # # . # # # ? . # #
# .
--- 1200,1234 ----
dnl 8 = checking whether printf supports POSIX/XSI format strings with
positions...
dnl 9 = checking whether printf supports the grouping flag...
dnl 10 = checking whether printf supports the zero flag correctly...
! dnl 11 = checking whether printf supports large precisions...
! dnl 12 = checking whether printf survives out-of-memory conditions...
! dnl 13 = checking for snprintf...
! dnl 14 = checking whether snprintf truncates the result as in C99...
! dnl 15 = checking whether snprintf returns a byte count as in C99...
! dnl 16 = checking whether snprintf fully supports the 'n' directive...
! dnl 17 = checking whether vsnprintf respects a zero size as in C99...
dnl
dnl . = yes, # = no.
dnl
! dnl 1 2 3 4 5 6 7 8 9 10 11 12 13 14
15 16 17
! dnl glibc 2.5 . . . . . . . . . . . . . .
. . .
! dnl glibc 2.3.6 . . . . # . . . . . . . . .
. . .
! dnl FreeBSD 5.4, 6.1 . . . . # . . . . # . # . .
. . .
! dnl MacOS X 10.3.9 . . . . # . . . . # . # . .
. . .
! dnl OpenBSD 3.9, 4.0 . ? ? ? # ? . . ? ? ? ? . .
. ? ?
! dnl Cygwin 2007 (= Cygwin 1.5.24) . . . . # # . . . # ? ? . .
. . .
! dnl Cygwin 2006 (= Cygwin 1.5.19) # . . . # # . . # # ? ? . .
. . .
! dnl Solaris 10 . . # # # . . . . # . . . .
. . .
! dnl Solaris 2.6 ... 9 # . # # # # . . . # . . . .
. . .
! dnl Solaris 2.5.1 # . # # # # . . . # . . # #
# # #
! dnl AIX 5.2 . . # # # . . . . # . . . .
. . .
! dnl AIX 4.3.2, 5.1 # . # # # # . . . # . . . .
. . .
! dnl HP-UX 11.31 . . . . # . . . . # . . . .
# # .
! dnl HP-UX 10.20, 11.{00,11,23} # . . . # # . . . # . . . .
# # #
! dnl IRIX 6.5 # . # # # # . . . # . . . .
# . .
! dnl OSF/1 5.1 # . # # # # . . . # . . . .
# . #
! dnl OSF/1 4.0d # . # # # # . . . # . . # #
# # #
! dnl NetBSD 4.0 . ? ? ? ? ? . . ? ? ? ? . .
. ? ?
! dnl NetBSD 3.0 . . . . # # . # # # . # . .
. . .
! dnl BeOS # # . # # # . # . . # ? . .
. . .
! dnl mingw # # # # # # . # # # # ? . #
# # .
*** m4/snprintf-posix.m4.orig 2007-11-04 17:05:19.000000000 +0100
--- m4/snprintf-posix.m4 2007-11-04 15:30:12.000000000 +0100
***************
*** 1,4 ****
! # snprintf-posix.m4 serial 9
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
--- 1,4 ----
! # snprintf-posix.m4 serial 10
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
***************
*** 17,22 ****
--- 17,23 ----
AC_REQUIRE([gl_PRINTF_POSITIONS])
AC_REQUIRE([gl_PRINTF_FLAG_GROUPING])
AC_REQUIRE([gl_PRINTF_FLAG_ZERO])
+ AC_REQUIRE([gl_PRINTF_PRECISION])
AC_REQUIRE([gl_PRINTF_ENOMEM])
gl_cv_func_snprintf_posix=no
AC_CHECK_FUNCS([snprintf])
***************
*** 45,63 ****
*yes)
case "$gl_cv_func_printf_flag_zero" in
*yes)
! case "$gl_cv_func_printf_enomem"
in
*yes)
! case
"$gl_cv_func_snprintf_truncation_c99" in
*yes)
! case
"$gl_cv_func_snprintf_retval_c99" in
*yes)
! case
"$gl_cv_func_snprintf_directive_n" in
*yes)
! case
"$gl_cv_func_vsnprintf_zerosize_c99" in
*yes)
! # snprintf
exists and is
! # already
POSIX compliant.
!
gl_cv_func_snprintf_posix=yes
;;
esac
;;
--- 46,68 ----
*yes)
case "$gl_cv_func_printf_flag_zero" in
*yes)
! case
"$gl_cv_func_printf_precision" in
*yes)
! case
"$gl_cv_func_printf_enomem" in
*yes)
! case
"$gl_cv_func_snprintf_truncation_c99" in
*yes)
! case
"$gl_cv_func_snprintf_retval_c99" in
*yes)
! case
"$gl_cv_func_snprintf_directive_n" in
*yes)
! case
"$gl_cv_func_vsnprintf_zerosize_c99" in
! *yes)
! #
snprintf exists and is
! # already
POSIX compliant.
!
gl_cv_func_snprintf_posix=yes
! ;;
! esac
;;
esac
;;
***************
*** 97,102 ****
--- 102,108 ----
gl_PREREQ_VASNPRINTF_DIRECTIVE_F
gl_PREREQ_VASNPRINTF_FLAG_GROUPING
gl_PREREQ_VASNPRINTF_FLAG_ZERO
+ gl_PREREQ_VASNPRINTF_PRECISION
gl_PREREQ_VASNPRINTF_ENOMEM
gl_REPLACE_VASNPRINTF
gl_REPLACE_SNPRINTF
*** m4/sprintf-posix.m4.orig 2007-11-04 17:05:19.000000000 +0100
--- m4/sprintf-posix.m4 2007-11-04 15:30:39.000000000 +0100
***************
*** 1,4 ****
! # sprintf-posix.m4 serial 8
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
--- 1,4 ----
! # sprintf-posix.m4 serial 9
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
***************
*** 17,22 ****
--- 17,23 ----
AC_REQUIRE([gl_PRINTF_POSITIONS])
AC_REQUIRE([gl_PRINTF_FLAG_GROUPING])
AC_REQUIRE([gl_PRINTF_FLAG_ZERO])
+ AC_REQUIRE([gl_PRINTF_PRECISION])
AC_REQUIRE([gl_PRINTF_ENOMEM])
gl_cv_func_sprintf_posix=no
case "$gl_cv_func_printf_sizes_c99" in
***************
*** 39,49 ****
*yes)
case "$gl_cv_func_printf_flag_zero" in
*yes)
! case "$gl_cv_func_printf_enomem" in
*yes)
! # sprintf exists and is already
! # POSIX compliant.
! gl_cv_func_sprintf_posix=yes
;;
esac
;;
--- 40,54 ----
*yes)
case "$gl_cv_func_printf_flag_zero" in
*yes)
! case "$gl_cv_func_printf_precision"
in
*yes)
! case
"$gl_cv_func_printf_enomem" in
! *yes)
! # sprintf exists and is
! # already POSIX compliant.
! gl_cv_func_sprintf_posix=yes
! ;;
! esac
;;
esac
;;
***************
*** 74,79 ****
--- 79,85 ----
gl_PREREQ_VASNPRINTF_DIRECTIVE_F
gl_PREREQ_VASNPRINTF_FLAG_GROUPING
gl_PREREQ_VASNPRINTF_FLAG_ZERO
+ gl_PREREQ_VASNPRINTF_PRECISION
gl_PREREQ_VASNPRINTF_ENOMEM
gl_REPLACE_VASNPRINTF
gl_REPLACE_SPRINTF
*** m4/vasnprintf-posix.m4.orig 2007-11-04 17:05:19.000000000 +0100
--- m4/vasnprintf-posix.m4 2007-11-04 15:31:18.000000000 +0100
***************
*** 1,4 ****
! # vasnprintf-posix.m4 serial 9
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
--- 1,4 ----
! # vasnprintf-posix.m4 serial 10
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
***************
*** 17,22 ****
--- 17,23 ----
AC_REQUIRE([gl_PRINTF_POSITIONS])
AC_REQUIRE([gl_PRINTF_FLAG_GROUPING])
AC_REQUIRE([gl_PRINTF_FLAG_ZERO])
+ AC_REQUIRE([gl_PRINTF_PRECISION])
AC_REQUIRE([gl_PRINTF_ENOMEM])
gl_cv_func_vasnprintf_posix=no
AC_CHECK_FUNCS_ONCE([vasnprintf])
***************
*** 40,52 ****
*yes)
case "$gl_cv_func_printf_flag_zero" in
*yes)
! case "$gl_cv_func_printf_enomem" in
*yes)
! if test $ac_cv_func_vasnprintf
= yes; then
! # vasnprintf exists and is
already
! # POSIX compliant.
!
gl_cv_func_vasnprintf_posix=yes
! fi
;;
esac
;;
--- 41,57 ----
*yes)
case "$gl_cv_func_printf_flag_zero" in
*yes)
! case "$gl_cv_func_printf_precision"
in
*yes)
! case
"$gl_cv_func_printf_enomem" in
! *yes)
! if test
$ac_cv_func_vasnprintf = yes; then
! # vasnprintf exists and is
! # already POSIX compliant.
!
gl_cv_func_vasnprintf_posix=yes
! fi
! ;;
! esac
;;
esac
;;
***************
*** 77,82 ****
--- 82,88 ----
gl_PREREQ_VASNPRINTF_DIRECTIVE_F
gl_PREREQ_VASNPRINTF_FLAG_GROUPING
gl_PREREQ_VASNPRINTF_FLAG_ZERO
+ gl_PREREQ_VASNPRINTF_PRECISION
gl_PREREQ_VASNPRINTF_ENOMEM
gl_REPLACE_VASNPRINTF
fi
*** m4/vasnprintf.m4.orig 2007-11-04 17:05:19.000000000 +0100
--- m4/vasnprintf.m4 2007-11-04 17:02:58.000000000 +0100
***************
*** 1,4 ****
! # vasnprintf.m4 serial 21
dnl Copyright (C) 2002-2004, 2006-2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
--- 1,4 ----
! # vasnprintf.m4 serial 22
dnl Copyright (C) 2002-2004, 2006-2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
***************
*** 178,183 ****
--- 178,204 ----
esac
])
+ # Extra prerequisites of lib/vasnprintf.c for supporting large precisions.
+ AC_DEFUN([gl_PREREQ_VASNPRINTF_PRECISION],
+ [
+ AC_REQUIRE([gl_PRINTF_PRECISION])
+ case "$gl_cv_func_printf_precision" in
+ *yes)
+ ;;
+ *)
+ AC_DEFINE([NEED_PRINTF_UNBOUNDED_PRECISION], 1,
+ [Define if the vasnprintf implementation needs special code for
+ supporting large precisions without arbitrary bounds.])
+ AC_DEFINE([NEED_PRINTF_DOUBLE], 1,
+ [Define if the vasnprintf implementation needs special code for
+ 'double' arguments.])
+ AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], 1,
+ [Define if the vasnprintf implementation needs special code for
+ 'long double' arguments.])
+ ;;
+ esac
+ ])
+
# Extra prerequisites of lib/vasnprintf.c for surviving out-of-memory
# conditions.
AC_DEFUN([gl_PREREQ_VASNPRINTF_ENOMEM],
***************
*** 211,216 ****
--- 232,238 ----
gl_PREREQ_VASNPRINTF_DIRECTIVE_F
gl_PREREQ_VASNPRINTF_FLAG_GROUPING
gl_PREREQ_VASNPRINTF_FLAG_ZERO
+ gl_PREREQ_VASNPRINTF_PRECISION
gl_PREREQ_VASNPRINTF_ENOMEM
])
*** m4/vasprintf-posix.m4.orig 2007-11-04 17:05:19.000000000 +0100
--- m4/vasprintf-posix.m4 2007-11-04 15:32:09.000000000 +0100
***************
*** 1,4 ****
! # vasprintf-posix.m4 serial 9
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
--- 1,4 ----
! # vasprintf-posix.m4 serial 10
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
***************
*** 17,22 ****
--- 17,23 ----
AC_REQUIRE([gl_PRINTF_POSITIONS])
AC_REQUIRE([gl_PRINTF_FLAG_GROUPING])
AC_REQUIRE([gl_PRINTF_FLAG_ZERO])
+ AC_REQUIRE([gl_PRINTF_PRECISION])
AC_REQUIRE([gl_PRINTF_ENOMEM])
gl_cv_func_vasprintf_posix=no
AC_CHECK_FUNCS([vasprintf])
***************
*** 40,52 ****
*yes)
case "$gl_cv_func_printf_flag_zero" in
*yes)
! case "$gl_cv_func_printf_enomem" in
*yes)
! if test $ac_cv_func_vasprintf =
yes; then
! # vasprintf exists and is
already
! # POSIX compliant.
! gl_cv_func_vasprintf_posix=yes
! fi
;;
esac
;;
--- 41,57 ----
*yes)
case "$gl_cv_func_printf_flag_zero" in
*yes)
! case "$gl_cv_func_printf_precision"
in
*yes)
! case
"$gl_cv_func_printf_enomem" in
! *yes)
! if test
$ac_cv_func_vasprintf = yes; then
! # vasprintf exists and is
! # already POSIX compliant.
!
gl_cv_func_vasprintf_posix=yes
! fi
! ;;
! esac
;;
esac
;;
***************
*** 77,82 ****
--- 82,88 ----
gl_PREREQ_VASNPRINTF_DIRECTIVE_F
gl_PREREQ_VASNPRINTF_FLAG_GROUPING
gl_PREREQ_VASNPRINTF_FLAG_ZERO
+ gl_PREREQ_VASNPRINTF_PRECISION
gl_PREREQ_VASNPRINTF_ENOMEM
gl_REPLACE_VASNPRINTF
gl_REPLACE_VASPRINTF
*** m4/vfprintf-posix.m4.orig 2007-11-04 17:05:19.000000000 +0100
--- m4/vfprintf-posix.m4 2007-11-04 15:32:36.000000000 +0100
***************
*** 1,4 ****
! # vfprintf-posix.m4 serial 8
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
--- 1,4 ----
! # vfprintf-posix.m4 serial 9
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
***************
*** 17,22 ****
--- 17,23 ----
AC_REQUIRE([gl_PRINTF_POSITIONS])
AC_REQUIRE([gl_PRINTF_FLAG_GROUPING])
AC_REQUIRE([gl_PRINTF_FLAG_ZERO])
+ AC_REQUIRE([gl_PRINTF_PRECISION])
AC_REQUIRE([gl_PRINTF_ENOMEM])
gl_cv_func_vfprintf_posix=no
case "$gl_cv_func_printf_sizes_c99" in
***************
*** 39,49 ****
*yes)
case "$gl_cv_func_printf_flag_zero" in
*yes)
! case "$gl_cv_func_printf_enomem" in
*yes)
! # vfprintf exists and is already
! # POSIX compliant.
! gl_cv_func_vfprintf_posix=yes
;;
esac
;;
--- 40,54 ----
*yes)
case "$gl_cv_func_printf_flag_zero" in
*yes)
! case "$gl_cv_func_printf_precision"
in
*yes)
! case
"$gl_cv_func_printf_enomem" in
! *yes)
! # vfprintf exists and is
! # already POSIX compliant.
!
gl_cv_func_vfprintf_posix=yes
! ;;
! esac
;;
esac
;;
***************
*** 74,79 ****
--- 79,85 ----
gl_PREREQ_VASNPRINTF_DIRECTIVE_F
gl_PREREQ_VASNPRINTF_FLAG_GROUPING
gl_PREREQ_VASNPRINTF_FLAG_ZERO
+ gl_PREREQ_VASNPRINTF_PRECISION
gl_PREREQ_VASNPRINTF_ENOMEM
gl_REPLACE_VASNPRINTF
gl_REPLACE_VFPRINTF
*** m4/vsnprintf-posix.m4.orig 2007-11-04 17:05:19.000000000 +0100
--- m4/vsnprintf-posix.m4 2007-11-04 15:33:05.000000000 +0100
***************
*** 1,4 ****
! # vsnprintf-posix.m4 serial 9
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
--- 1,4 ----
! # vsnprintf-posix.m4 serial 10
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
***************
*** 17,22 ****
--- 17,23 ----
AC_REQUIRE([gl_PRINTF_POSITIONS])
AC_REQUIRE([gl_PRINTF_FLAG_GROUPING])
AC_REQUIRE([gl_PRINTF_FLAG_ZERO])
+ AC_REQUIRE([gl_PRINTF_PRECISION])
AC_REQUIRE([gl_PRINTF_ENOMEM])
gl_cv_func_vsnprintf_posix=no
AC_CHECK_FUNCS([vsnprintf])
***************
*** 46,64 ****
*yes)
case "$gl_cv_func_printf_flag_zero" in
*yes)
! case "$gl_cv_func_printf_enomem"
in
*yes)
! case
"$gl_cv_func_snprintf_truncation_c99" in
*yes)
! case
"$gl_cv_func_snprintf_retval_c99" in
*yes)
! case
"$gl_cv_func_snprintf_directive_n" in
*yes)
! case
"$gl_cv_func_vsnprintf_zerosize_c99" in
*yes)
! # vsnprintf
exists and is
! # already
POSIX compliant.
!
gl_cv_func_vsnprintf_posix=yes
;;
esac
;;
--- 47,69 ----
*yes)
case "$gl_cv_func_printf_flag_zero" in
*yes)
! case
"$gl_cv_func_printf_precision" in
*yes)
! case
"$gl_cv_func_printf_enomem" in
*yes)
! case
"$gl_cv_func_snprintf_truncation_c99" in
*yes)
! case
"$gl_cv_func_snprintf_retval_c99" in
*yes)
! case
"$gl_cv_func_snprintf_directive_n" in
*yes)
! case
"$gl_cv_func_vsnprintf_zerosize_c99" in
! *yes)
! #
vsnprintf exists and is
! # already
POSIX compliant.
!
gl_cv_func_vsnprintf_posix=yes
! ;;
! esac
;;
esac
;;
***************
*** 98,103 ****
--- 103,109 ----
gl_PREREQ_VASNPRINTF_DIRECTIVE_F
gl_PREREQ_VASNPRINTF_FLAG_GROUPING
gl_PREREQ_VASNPRINTF_FLAG_ZERO
+ gl_PREREQ_VASNPRINTF_PRECISION
gl_PREREQ_VASNPRINTF_ENOMEM
gl_REPLACE_VASNPRINTF
gl_REPLACE_VSNPRINTF
*** m4/vsprintf-posix.m4.orig 2007-11-04 17:05:19.000000000 +0100
--- m4/vsprintf-posix.m4 2007-11-04 15:33:32.000000000 +0100
***************
*** 1,4 ****
! # vsprintf-posix.m4 serial 8
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
--- 1,4 ----
! # vsprintf-posix.m4 serial 9
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
***************
*** 17,22 ****
--- 17,23 ----
AC_REQUIRE([gl_PRINTF_POSITIONS])
AC_REQUIRE([gl_PRINTF_FLAG_GROUPING])
AC_REQUIRE([gl_PRINTF_FLAG_ZERO])
+ AC_REQUIRE([gl_PRINTF_PRECISION])
AC_REQUIRE([gl_PRINTF_ENOMEM])
gl_cv_func_vsprintf_posix=no
case "$gl_cv_func_printf_sizes_c99" in
***************
*** 39,49 ****
*yes)
case "$gl_cv_func_printf_flag_zero" in
*yes)
! case "$gl_cv_func_printf_enomem" in
*yes)
! # vsprintf exists and is already
! # POSIX compliant.
! gl_cv_func_vsprintf_posix=yes
;;
esac
;;
--- 40,54 ----
*yes)
case "$gl_cv_func_printf_flag_zero" in
*yes)
! case "$gl_cv_func_printf_precision"
in
*yes)
! case
"$gl_cv_func_printf_enomem" in
! *yes)
! # vsprintf exists and is
! # already POSIX compliant.
!
gl_cv_func_vsprintf_posix=yes
! ;;
! esac
;;
esac
;;
***************
*** 74,79 ****
--- 79,85 ----
gl_PREREQ_VASNPRINTF_DIRECTIVE_F
gl_PREREQ_VASNPRINTF_FLAG_GROUPING
gl_PREREQ_VASNPRINTF_FLAG_ZERO
+ gl_PREREQ_VASNPRINTF_PRECISION
gl_PREREQ_VASNPRINTF_ENOMEM
gl_REPLACE_VASNPRINTF
gl_REPLACE_VSPRINTF
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- YAPPP: yet another *printf portability problem,
Bruno Haible <=