Hash :
0710282c
Author :
Date :
2025-04-12T11:03:45
vasnprintf: Work around two grouping bugs on native Windows. * m4/vasnprintf.m4 (gl_PREREQ_VASNPRINTF_FLAG_GROUPING): On native Windows, define NEED_PRINTF_FLAG_GROUPING. * lib/vasnprintf.c (localeconv): Undefine. (thousands_separator_char, thousands_separator_wchar): On native Windows, use localeconv(). * tests/test-vasnprintf-posix2.c (main): On native Windows, expect 3 digits for the exponent. * tests/test-vasnwprintf-posix2.c (main): Likewise. * doc/posix-functions/fprintf.texi: Mention the mingw and MSVC bugs. * doc/posix-functions/vfprintf.texi: Likewise. * doc/posix-functions/printf.texi: Likewise. * doc/posix-functions/vprintf.texi: Likewise. * doc/posix-functions/sprintf.texi: Likewise. * doc/posix-functions/vsprintf.texi: Likewise. * doc/posix-functions/snprintf.texi: Likewise. * doc/posix-functions/vsnprintf.texi: Likewise. * doc/posix-functions/dprintf.texi: Likewise. * doc/posix-functions/vdprintf.texi: Likewise. * doc/posix-functions/fwprintf.texi: Likewise. * doc/posix-functions/vfwprintf.texi: Likewise. * doc/posix-functions/wprintf.texi: Likewise. * doc/posix-functions/vwprintf.texi: Likewise. * doc/posix-functions/swprintf.texi: Likewise. * doc/posix-functions/vswprintf.texi: Likewise. * doc/posix-functions/asprintf.texi: Likewise. * doc/posix-functions/vasprintf.texi: Likewise. * doc/glibc-functions/obstack_printf.texi: Likewise. * doc/glibc-functions/obstack_vprintf.texi: Likewise.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
@node obstack_vprintf
@subsection @code{obstack_vprintf}
@findex obstack_vprintf
Documentation:@*
@ifinfo
@ref{Variable Arguments Output,,Variable Arguments Output Functions,libc}.
@end ifinfo
@ifnotinfo
@url{https://www.gnu.org/software/libc/manual/html_node/Variable-Arguments-Output.html}.
@end ifnotinfo
Gnulib module: obstack-printf or obstack-printf-posix or obstack-printf-gnu
@mindex obstack-printf
@mindex obstack-printf-posix
@mindex obstack-printf-gnu
Portability problems fixed by either Gnulib module
@code{obstack-printf} or @code{obstack-printf-posix} or @code{obstack-printf-gnu}:
@itemize
@item
This function is missing on all non-glibc platforms:
musl libc, macOS 14, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5, Minix 3.1.8, AIX 7.3, HP-UX 11, Solaris 11.4, Cygwin 3.5.3, mingw, MSVC 14, Android 9.0.
@end itemize
Portability problems fixed by either Gnulib module @code{obstack-printf-posix} or @code{obstack-printf-gnu}:
@itemize
@item
This function does not support size specifiers as in C99 (@code{hh}, @code{ll},
@code{j}, @code{t}, @code{z}) on some platforms:
AIX 5.1, HP-UX 11.23, Solaris 9, Cygwin 1.5.24, old mingw, MSVC 9.
@item
This function does not support size specifiers as in C23 (@code{w8},
@code{w16}, @code{w32}, @code{w64}, @code{wf8}, @code{wf16}, @code{wf32},
@code{wf64}) on some platforms:
glibc 2.37.
@item
printf of @samp{long double} numbers is unsupported on some platforms:
mingw, MSVC 14.
@item
printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an
incorrect result on some platforms:
AIX 7.3, Solaris 11.4, mingw, MSVC 14.
@item
This function doesn't support the @code{'} flag at all on some platforms:
mingw without @code{__USE_MINGW_ANSI_STDIO}, MSVC 14.
@item
This function doesn't support the @code{'} flag correctly for integers
(it uses the decimal point instead of the thousands separator!)
on some platforms:
mingw with @code{__USE_MINGW_ANSI_STDIO}.
@item
This function doesn't support the @code{'} flag together with a precision
on an integer argument correctly on some platforms:
glibc 2.36, FreeBSD 14.0, NetBSD 10.0, Solaris 11, Cygwin 3.6.0, Haiku.
@item
This function doesn't support the @code{'} flag correctly in locales where
the thousands separator is a multibyte character on some platforms:
NetBSD 10.0, Solaris 11 OpenIndiana.
@item
This function does not support the @samp{a} and @samp{A} directives on some
platforms:
FreeBSD 5.2.1, OpenBSD 4.0, AIX 5.2, HP-UX 11,
Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14.
@item
This function does not support the @samp{b} directive, required by ISO C23,
on some platforms:
glibc 2.34, musl libc, macOS 14, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.5,
AIX 7.3, HP-UX 11, Solaris 11.4, Cygwin 3.5.3, mingw, MSVC 14, Android 9.0.
@item
This function does not support the @samp{F} directive on some platforms:
NetBSD 3.0, AIX 5.1, HP-UX 11.23, Solaris 9,
Cygwin 1.5.x, mingw, MSVC 14.
@item
This function does not support the @samp{ls} directive on some platforms:
OpenBSD 4.0, Cygwin 1.5.x, Haiku.
@item
This function does not support precisions in the @samp{ls} directive correctly
on some platforms:
Solaris 11.4.
@item
This function does not support format directives that access arguments in an
arbitrary order, such as @code{"%2$s"}, on some platforms:
NetBSD 3.0, mingw, MSVC 14.
@item
This function doesn't support the @code{'} flag on some platforms:
NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 14.
@item
This function does not round the argument of the @samp{a} directive correctly
on some platforms:
macOS 14, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5, AIX 7.3, Solaris 11.4.
@item
printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded
with zeroes) on some platforms:
Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 7.3, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC/clang.
@item
printf @code{"%#.0x"} or @code{"%#.0X"} with a zero argument yields an
incorrect result (non-empty) on some platforms:
Mac OS X 10.6.
@item
This function does not support precisions larger than 512 or 1024 in integer,
floating-point and pointer output on some platforms:
Solaris 10/x86, mingw, MSVC/clang.
@item
This function produces wrong output for the @samp{lc} directive with a NUL
wide character argument on some platforms:
musl libc 1.2.4.
@item
This function can crash in out-of-memory conditions on some platforms:
FreeBSD 14.0, NetBSD 5.0.
@end itemize
Portability problems fixed by Gnulib module @code{obstack-printf-gnu}:
@itemize
@item
This function does not support the @samp{B} directive on some platforms:
glibc 2.34, musl libc, macOS 14, FreeBSD 13.2, NetBSD 10.0, OpenBSD 7.5, AIX 7.3, Solaris 11.4, Cygwin 3.5.3, mingw, MSVC, Android 9.0.
@end itemize
@mindex printf-with-n-directive
Portability problems fixed by either Gnulib module @code{obstack-printf-posix} or @code{obstack-printf-gnu}
and additionally the Gnulib module @code{printf-with-n-directive}:
@itemize
@item
This function does not support the @samp{n} directive on some platforms:
MSVC 14.
@item
This function does not fully support the @samp{n} directive on some platforms:
HP-UX 11, mingw, MSVC 14.
@end itemize
Portability problems not fixed by Gnulib:
@itemize
@item
The @code{%m} directive is not portable, use @code{%s} mapped to an
argument of @code{strerror(errno)} (or a version of @code{strerror_r})
instead.
@end itemize