# HG changeset patch # User Bruno Haible # Date 1315682288 -7200 # Node ID 2171e9d2231b1a69171d336cf6f745df2b107c5e # Parent 6e6b07297b6d3bf188ee814c2cc87c82f34277a9 *printf: Add support for MSVC compiler. * m4/printf.m4 (gl_PRINTF_DIRECTIVE_N): On MSVC, install a handler that handles the exception caused by the %n directive. When cross-compiling, guess no on native Windows. (gl_SNPRINTF_TRUNCATION_C99, gl_SNPRINTF_RETVAL_C99, gl_SNPRINTF_DIRECTIVE_N, gl_SNPRINTF_SIZE1): When snprintf is missing, emulate it through vsnprintf. * m4/vsnprintf-posix.m4 (gl_FUNC_VSNPRINTF_POSIX): Update comment. * doc/posix-functions/dprintf.texi: Update documentation regarding MSVC 9. * doc/posix-functions/fprintf.texi: Likewise. * doc/posix-functions/printf.texi: Likewise. * doc/posix-functions/snprintf.texi: Likewise. * doc/posix-functions/sprintf.texi: Likewise. * doc/posix-functions/swprintf.texi: Likewise. * doc/posix-functions/vdprintf.texi: Likewise. * doc/posix-functions/vfprintf.texi: Likewise. * doc/posix-functions/vprintf.texi: Likewise. * doc/posix-functions/vsnprintf.texi: Likewise. * doc/posix-functions/vsprintf.texi: Likewise. * doc/glibc-functions/asprintf.texi: Likewise. * doc/glibc-functions/obstack_printf.texi: Likewise. * doc/glibc-functions/obstack_vprintf.texi: Likewise. * doc/glibc-functions/vasprintf.texi: Likewise. diff --git a/doc/glibc-functions/asprintf.texi b/doc/glibc-functions/asprintf.texi --- a/doc/glibc-functions/asprintf.texi +++ b/doc/glibc-functions/asprintf.texi @@ -8,7 +8,7 @@ @itemize @item This function is missing on some platforms: -AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw, Interix 3.5. +AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw, MSVC 9, Interix 3.5. @end itemize Portability problems fixed by Gnulib module @code{vasprintf-posix}: diff --git a/doc/glibc-functions/obstack_printf.texi b/doc/glibc-functions/obstack_printf.texi --- a/doc/glibc-functions/obstack_printf.texi +++ b/doc/glibc-functions/obstack_printf.texi @@ -9,7 +9,7 @@ @itemize @item This function is missing on all non-glibc platforms: -MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, Interix 3.5, BeOS. +MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems fixed by Gnulib module @code{ostack-printf-posix}: @@ -17,23 +17,26 @@ @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, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, BeOS. +AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, MSVC 9, BeOS. @item printf of @samp{long double} numbers is unsupported on some platforms: -mingw, BeOS. +mingw, MSVC 9, BeOS. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: -AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw. +AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, MacOS X 10.5, NetBSD 5.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, -IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, BeOS. +IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @item This function does not support the @samp{F} directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 9, -Cygwin 1.5.x, mingw, BeOS. +Cygwin 1.5.x, mingw, MSVC 9, BeOS. +@item +This function does not support the @samp{n} directive on some platforms: +MSVC 9. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Haiku. @@ -44,10 +47,10 @@ @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, BeOS. +NetBSD 3.0, mingw, MSVC 9, BeOS. @item This function doesn't support the @code{'} flag on some platforms: -NetBSD 3.0, Cygwin 1.5.24, mingw. +NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 9. @item This function behaves incorrectly when a @samp{-} flag and a negative width are specified together, on some platforms: @@ -55,17 +58,17 @@ @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: -MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw. +MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9. @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, BeOS. +Solaris 10/x86, mingw, MSVC 9, BeOS. @item This function can crash in out-of-memory conditions on some platforms: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0. @item This function does not fully support the @samp{n} directive on some platforms: -HP-UX 11, mingw. +HP-UX 11, mingw, MSVC 9. @end itemize Portability problems not fixed by Gnulib: diff --git a/doc/glibc-functions/obstack_vprintf.texi b/doc/glibc-functions/obstack_vprintf.texi --- a/doc/glibc-functions/obstack_vprintf.texi +++ b/doc/glibc-functions/obstack_vprintf.texi @@ -9,7 +9,7 @@ @itemize @item This function is missing on all non-glibc platforms: -MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, Interix 3.5, BeOS. +MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems fixed by Gnulib module @code{ostack-printf-posix}: @@ -17,23 +17,26 @@ @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, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, BeOS. +AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, MSVC 9, BeOS. @item printf of @samp{long double} numbers is unsupported on some platforms: -mingw, BeOS. +mingw, MSVC 9, BeOS. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: -AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw. +AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, MacOS X 10.5, NetBSD 5.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, -IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, BeOS. +IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @item This function does not support the @samp{F} directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 9, -Cygwin 1.5.x, mingw, BeOS. +Cygwin 1.5.x, mingw, MSVC 9, BeOS. +@item +This function does not support the @samp{n} directive on some platforms: +MSVC 9. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Haiku. @@ -44,10 +47,10 @@ @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, BeOS. +NetBSD 3.0, mingw, MSVC 9, BeOS. @item This function doesn't support the @code{'} flag on some platforms: -NetBSD 3.0, Cygwin 1.5.24, mingw. +NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 9. @item This function behaves incorrectly when a @samp{-} flag and a negative width are specified together, on some platforms: @@ -55,17 +58,17 @@ @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: -MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw. +MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9. @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, BeOS. +Solaris 10/x86, mingw, MSVC 9, BeOS. @item This function can crash in out-of-memory conditions on some platforms: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0. @item This function does not fully support the @samp{n} directive on some platforms: -HP-UX 11, mingw. +HP-UX 11, mingw, MSVC 9. @end itemize Portability problems not fixed by Gnulib: diff --git a/doc/glibc-functions/vasprintf.texi b/doc/glibc-functions/vasprintf.texi --- a/doc/glibc-functions/vasprintf.texi +++ b/doc/glibc-functions/vasprintf.texi @@ -8,7 +8,7 @@ @itemize @item This function is missing on some platforms: -AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw, Interix 3.5. +AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw, MSVC 9, Interix 3.5. @end itemize Portability problems fixed by Gnulib module @code{vasprintf-posix}: diff --git a/doc/posix-functions/dprintf.texi b/doc/posix-functions/dprintf.texi --- a/doc/posix-functions/dprintf.texi +++ b/doc/posix-functions/dprintf.texi @@ -11,7 +11,7 @@ @item This function is missing on many non-glibc platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, -IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, Interix 3.5, BeOS. +IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems fixed by Gnulib module @code{dprintf-posix}: diff --git a/doc/posix-functions/fprintf.texi b/doc/posix-functions/fprintf.texi --- a/doc/posix-functions/fprintf.texi +++ b/doc/posix-functions/fprintf.texi @@ -11,23 +11,26 @@ @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, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, BeOS. +AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, MSVC 9, BeOS. @item printf of @samp{long double} numbers is unsupported on some platforms: -mingw, BeOS. +mingw, MSVC 9, BeOS. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: -AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw. +AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, MacOS X 10.5, NetBSD 5.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, -IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, BeOS. +IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @item This function does not support the @samp{F} directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 9, -Cygwin 1.5.x, mingw, BeOS. +Cygwin 1.5.x, mingw, MSVC 9, BeOS. +@item +This function does not support the @samp{n} directive on some platforms: +MSVC 9. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Haiku. @@ -38,10 +41,10 @@ @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, BeOS. +NetBSD 3.0, mingw, MSVC 9, BeOS. @item This function doesn't support the @code{'} flag on some platforms: -NetBSD 3.0, Cygwin 1.5.24, mingw. +NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 9. @item This function behaves incorrectly when a @samp{-} flag and a negative width are specified together, on some platforms: @@ -49,11 +52,11 @@ @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: -MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw. +MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9. @item This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: -AIX 7.1, Solaris 10/x86, mingw, BeOS. +AIX 7.1, Solaris 10/x86, mingw, MSVC 9, BeOS. @item This function mishandles large floating point precisions (for example, formatting 1.0 with @samp{"%.511f"}) @@ -70,7 +73,7 @@ When writing to a non-blocking pipe whose buffer is full, this function fails with @code{errno} being set to @code{ENOSPC} instead of @code{EAGAIN} on some platforms: -mingw. +mingw, MSVC 9. @end itemize Portability problems fixed by Gnulib module @code{stdio} or @code{fprintf-posix}, together with module @code{sigpipe}: @@ -78,7 +81,7 @@ @item When writing to a pipe with no readers, this function fails, instead of obeying the current @code{SIGPIPE} handler, on some platforms: -mingw. +mingw, MSVC 9. @end itemize Portability problems not fixed by Gnulib: diff --git a/doc/posix-functions/printf.texi b/doc/posix-functions/printf.texi --- a/doc/posix-functions/printf.texi +++ b/doc/posix-functions/printf.texi @@ -11,23 +11,26 @@ @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, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, BeOS. +AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, MSVC 9, BeOS. @item printf of @samp{long double} numbers is unsupported on some platforms: -mingw, BeOS. +mingw, MSVC 9, BeOS. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: -AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw. +AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, MacOS X 10.5, NetBSD 5.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, -IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, BeOS. +IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @item This function does not support the @samp{F} directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 9, -Cygwin 1.5.x, mingw, BeOS. +Cygwin 1.5.x, mingw, MSVC 9, BeOS. +@item +This function does not support the @samp{n} directive on some platforms: +MSVC 9. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Haiku. @@ -38,10 +41,10 @@ @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, BeOS. +NetBSD 3.0, mingw, MSVC 9, BeOS. @item This function doesn't support the @code{'} flag on some platforms: -NetBSD 3.0, Cygwin 1.5.24, mingw. +NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 9. @item This function behaves incorrectly when a @samp{-} flag and a negative width are specified together, on some platforms: @@ -49,11 +52,11 @@ @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: -MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw. +MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9. @item This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: -AIX 7.1, Solaris 10/x86, mingw, BeOS. +AIX 7.1, Solaris 10/x86, mingw, MSVC 9, BeOS. @item This function mishandles large floating point precisions (for example, formatting 1.0 with @samp{"%.511f"}) @@ -70,7 +73,7 @@ When writing to a non-blocking pipe whose buffer is full, this function fails with @code{errno} being set to @code{ENOSPC} instead of @code{EAGAIN} on some platforms: -mingw. +mingw, MSVC 9. @end itemize Portability problems fixed by Gnulib module @code{stdio} or @code{printf-posix}, together with module @code{sigpipe}: @@ -78,7 +81,7 @@ @item When writing to a pipe with no readers, this function fails, instead of obeying the current @code{SIGPIPE} handler, on some platforms: -mingw. +mingw, MSVC 9. @end itemize Portability problems not fixed by Gnulib: diff --git a/doc/posix-functions/snprintf.texi b/doc/posix-functions/snprintf.texi --- a/doc/posix-functions/snprintf.texi +++ b/doc/posix-functions/snprintf.texi @@ -10,7 +10,7 @@ @itemize @item This function is missing on some platforms: -IRIX 5.3, OSF/1 4.0, Solaris 2.5.1. +IRIX 5.3, OSF/1 4.0, Solaris 2.5.1, MSVC 9. @item This function does not support format directives that access arguments in an arbitrary order, such as @code{"%2$s"}, on some platforms: @@ -30,23 +30,26 @@ @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, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, BeOS. +AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, MSVC 9, BeOS. @item printf of @samp{long double} numbers is unsupported on some platforms: -mingw, BeOS. +mingw, MSVC 9, BeOS. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: -AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw. +AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, MacOS X 10.5, NetBSD 5.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, -IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, BeOS. +IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @item This function does not support the @samp{F} directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 9, -Cygwin 1.5.x, mingw, BeOS. +Cygwin 1.5.x, mingw, MSVC 9, BeOS. +@item +This function does not support the @samp{n} directive on some platforms: +MSVC 9. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Haiku. @@ -56,7 +59,7 @@ Solaris 11 2010-11. @item This function doesn't support the @code{'} flag on some platforms: -NetBSD 3.0, Cygwin 1.5.24, mingw. +NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 9. @item This function behaves incorrectly when a @samp{-} flag and a negative width are specified together, on some platforms: @@ -64,11 +67,11 @@ @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: -MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw. +MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9. @item This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: -AIX 7.1, Solaris 10/x86, mingw, BeOS. +AIX 7.1, Solaris 10/x86, mingw, MSVC 9, BeOS. @item This function mishandles large floating point precisions (for example, formatting 1.0 with @samp{"%.511f"}) @@ -79,10 +82,10 @@ MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0. @item This function does not truncate the result as specified in C99 on some platforms: -mingw. +mingw, MSVC 9. @item This function does not fully support the @samp{n} directive on some platforms: -HP-UX 11, mingw. +HP-UX 11, mingw, MSVC 9. @item This function overwrites memory even when a zero size argument is passed on some platforms: diff --git a/doc/posix-functions/sprintf.texi b/doc/posix-functions/sprintf.texi --- a/doc/posix-functions/sprintf.texi +++ b/doc/posix-functions/sprintf.texi @@ -11,23 +11,26 @@ @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, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, BeOS. +AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, MSVC 9, BeOS. @item printf of @samp{long double} numbers is unsupported on some platforms: -mingw, BeOS. +mingw, MSVC 9, BeOS. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: -AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw. +AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, MacOS X 10.5, NetBSD 5.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, -IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, BeOS. +IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @item This function does not support the @samp{F} directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 9, -Cygwin 1.5.x, mingw, BeOS. +Cygwin 1.5.x, mingw, MSVC 9, BeOS. +@item +This function does not support the @samp{n} directive on some platforms: +MSVC 9. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Haiku. @@ -38,10 +41,10 @@ @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, BeOS. +NetBSD 3.0, mingw, MSVC 9, BeOS. @item This function doesn't support the @code{'} flag on some platforms: -NetBSD 3.0, Cygwin 1.5.24, mingw. +NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 9. @item This function behaves incorrectly when a @samp{-} flag and a negative width are specified together, on some platforms: @@ -49,11 +52,11 @@ @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: -MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw. +MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9. @item This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: -AIX 7.1, Solaris 10/x86, mingw, BeOS. +AIX 7.1, Solaris 10/x86, mingw, MSVC 9, BeOS. @item This function mishandles large floating point precisions (for example, formatting 1.0 with @samp{"%.511f"}) diff --git a/doc/posix-functions/swprintf.texi b/doc/posix-functions/swprintf.texi --- a/doc/posix-functions/swprintf.texi +++ b/doc/posix-functions/swprintf.texi @@ -16,6 +16,9 @@ This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11.00, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Interix 3.5, BeOS. @item +This function does not support the @samp{n} directive on some platforms: +MSVC 9. +@item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item diff --git a/doc/posix-functions/vdprintf.texi b/doc/posix-functions/vdprintf.texi --- a/doc/posix-functions/vdprintf.texi +++ b/doc/posix-functions/vdprintf.texi @@ -11,7 +11,7 @@ @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, -IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, Interix 3.5. +IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5. @end itemize Portability problems fixed by Gnulib module @code{vdprintf-posix}: diff --git a/doc/posix-functions/vfprintf.texi b/doc/posix-functions/vfprintf.texi --- a/doc/posix-functions/vfprintf.texi +++ b/doc/posix-functions/vfprintf.texi @@ -11,23 +11,26 @@ @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, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, BeOS. +AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, MSVC 9, BeOS. @item printf of @samp{long double} numbers is unsupported on some platforms: -mingw, BeOS. +mingw, MSVC 9, BeOS. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: -AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw. +AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, MacOS X 10.5, NetBSD 5.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, -IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, BeOS. +IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @item This function does not support the @samp{F} directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 9, -Cygwin 1.5.x, mingw, BeOS. +Cygwin 1.5.x, mingw, MSVC 9, BeOS. +@item +This function does not support the @samp{n} directive on some platforms: +MSVC 9. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Haiku. @@ -38,10 +41,10 @@ @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, BeOS. +NetBSD 3.0, mingw, MSVC 9, BeOS. @item This function doesn't support the @code{'} flag on some platforms: -NetBSD 3.0, Cygwin 1.5.24, mingw. +NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 9. @item This function behaves incorrectly when a @samp{-} flag and a negative width are specified together, on some platforms: @@ -49,11 +52,11 @@ @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: -MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw. +MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9. @item This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: -AIX 7.1, Solaris 10/x86, mingw, BeOS. +AIX 7.1, Solaris 10/x86, mingw, MSVC 9, BeOS. @item This function mishandles large floating point precisions (for example, formatting 1.0 with @samp{"%.511f"}) @@ -70,7 +73,7 @@ When writing to a non-blocking pipe whose buffer is full, this function fails with @code{errno} being set to @code{ENOSPC} instead of @code{EAGAIN} on some platforms: -mingw. +mingw, MSVC 9. @end itemize Portability problems fixed by Gnulib module @code{stdio} or @code{vfprintf-posix}, together with module @code{sigpipe}: @@ -78,7 +81,7 @@ @item When writing to a pipe with no readers, this function fails, instead of obeying the current @code{SIGPIPE} handler, on some platforms: -mingw. +mingw, MSVC 9. @end itemize Portability problems not fixed by Gnulib: diff --git a/doc/posix-functions/vprintf.texi b/doc/posix-functions/vprintf.texi --- a/doc/posix-functions/vprintf.texi +++ b/doc/posix-functions/vprintf.texi @@ -11,23 +11,26 @@ @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, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, BeOS. +AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, MSVC 9, BeOS. @item printf of @samp{long double} numbers is unsupported on some platforms: -mingw, BeOS. +mingw, MSVC 9, BeOS. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: -AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw. +AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, MacOS X 10.5, NetBSD 5.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, -IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, BeOS. +IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @item This function does not support the @samp{F} directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 9, -Cygwin 1.5.x, mingw, BeOS. +Cygwin 1.5.x, mingw, MSVC 9, BeOS. +@item +This function does not support the @samp{n} directive on some platforms: +MSVC 9. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Haiku. @@ -38,10 +41,10 @@ @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, BeOS. +NetBSD 3.0, mingw, MSVC 9, BeOS. @item This function doesn't support the @code{'} flag on some platforms: -NetBSD 3.0, Cygwin 1.5.24, mingw. +NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 9. @item This function behaves incorrectly when a @samp{-} flag and a negative width are specified together, on some platforms: @@ -49,11 +52,11 @@ @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: -MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw. +MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9. @item This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: -AIX 7.1, Solaris 10/x86, mingw, BeOS. +AIX 7.1, Solaris 10/x86, mingw, MSVC 9, BeOS. @item This function mishandles large floating point precisions (for example, formatting 1.0 with @samp{"%.511f"}) @@ -70,7 +73,7 @@ When writing to a non-blocking pipe whose buffer is full, this function fails with @code{errno} being set to @code{ENOSPC} instead of @code{EAGAIN} on some platforms: -mingw. +mingw, MSVC 9. @end itemize Portability problems fixed by Gnulib module @code{stdio} or @code{vprintf-posix}, together with module @code{sigpipe}: @@ -78,7 +81,7 @@ @item When writing to a pipe with no readers, this function fails, instead of obeying the current @code{SIGPIPE} handler, on some platforms: -mingw. +mingw, MSVC 9. @end itemize Portability problems not fixed by Gnulib: diff --git a/doc/posix-functions/vsnprintf.texi b/doc/posix-functions/vsnprintf.texi --- a/doc/posix-functions/vsnprintf.texi +++ b/doc/posix-functions/vsnprintf.texi @@ -14,7 +14,7 @@ @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, BeOS. +NetBSD 3.0, mingw, MSVC 9, BeOS. @item This function overwrites memory even when a size argument of 1 is passed on some platforms: @@ -22,7 +22,7 @@ @item This function does not return a byte count as specified in C99 on some platforms: -HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, mingw. +HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, mingw, MSVC 9. @end itemize Portability problems fixed by Gnulib module @code{vsnprintf-posix}: @@ -30,23 +30,23 @@ @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, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, BeOS. +AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, MSVC 9, BeOS. @item printf of @samp{long double} numbers is unsupported on some platforms: -mingw, BeOS. +mingw, MSVC 9, BeOS. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: -AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw. +AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, MacOS X 10.5, NetBSD 5.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, -IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, BeOS. +IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @item This function does not support the @samp{F} directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 9, -Cygwin 1.5.x, mingw, BeOS. +Cygwin 1.5.x, mingw, MSVC 9, BeOS. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Haiku. @@ -56,7 +56,7 @@ Solaris 11 2010-11. @item This function doesn't support the @code{'} flag on some platforms: -NetBSD 3.0, Cygwin 1.5.24, mingw. +NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 9. @item This function behaves incorrectly when a @samp{-} flag and a negative width are specified together, on some platforms: @@ -64,11 +64,11 @@ @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: -MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw. +MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9. @item This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: -AIX 7.1, Solaris 10/x86, mingw, BeOS. +AIX 7.1, Solaris 10/x86, mingw, MSVC 9, BeOS. @item This function mishandles large floating point precisions (for example, formatting 1.0 with @samp{"%.511f"}) @@ -79,10 +79,10 @@ MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0. @item This function does not truncate the result as specified in C99 on some platforms: -mingw. +mingw, MSVC 9. @item This function does not fully support the @samp{n} directive on some platforms: -HP-UX 11, mingw. +HP-UX 11, mingw, MSVC 9. @item This function overwrites memory even when a zero size argument is passed on some platforms: diff --git a/doc/posix-functions/vsprintf.texi b/doc/posix-functions/vsprintf.texi --- a/doc/posix-functions/vsprintf.texi +++ b/doc/posix-functions/vsprintf.texi @@ -11,23 +11,26 @@ @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, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, BeOS. +AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, MSVC 9, BeOS. @item printf of @samp{long double} numbers is unsupported on some platforms: -mingw, BeOS. +mingw, MSVC 9, BeOS. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: -AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw. +AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, MacOS X 10.5, NetBSD 5.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, -IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, BeOS. +IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @item This function does not support the @samp{F} directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 9, -Cygwin 1.5.x, mingw, BeOS. +Cygwin 1.5.x, mingw, MSVC 9, BeOS. +@item +This function does not support the @samp{n} directive on some platforms: +MSVC 9. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Haiku. @@ -38,10 +41,10 @@ @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, BeOS. +NetBSD 3.0, mingw, MSVC 9, BeOS. @item This function doesn't support the @code{'} flag on some platforms: -NetBSD 3.0, Cygwin 1.5.24, mingw. +NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 9. @item This function behaves incorrectly when a @samp{-} flag and a negative width are specified together, on some platforms: @@ -49,11 +52,11 @@ @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: -MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw. +MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9. @item This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: -AIX 7.1, Solaris 10/x86, mingw, BeOS. +AIX 7.1, Solaris 10/x86, mingw, MSVC 9, BeOS. @item This function mishandles large floating point precisions (for example, formatting 1.0 with @samp{"%.511f"}) diff --git a/m4/printf.m4 b/m4/printf.m4 --- a/m4/printf.m4 +++ b/m4/printf.m4 @@ -1,4 +1,4 @@ -# printf.m4 serial 43 +# printf.m4 serial 44 dnl Copyright (C) 2003, 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -615,12 +615,27 @@ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include +#include #include +#ifdef _MSC_VER +/* See page about "Parameter Validation" on msdn.microsoft.com. */ +static void cdecl +invalid_parameter_handler (const wchar_t *expression, + const wchar_t *function, + const wchar_t *file, unsigned int line, + uintptr_t dummy) +{ + exit (1); +} +#endif static char fmtstring[10]; static char buf[100]; int main () { int count = -1; +#ifdef _MSC_VER + _set_invalid_parameter_handler (invalid_parameter_handler); +#endif /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) support %n in format strings in read-only memory but not in writable memory. */ @@ -636,7 +651,8 @@ [ changequote(,)dnl case "$host_os" in - *) gl_cv_func_printf_directive_n="guessing yes";; + mingw*) gl_cv_func_printf_directive_n="guessing no";; + *) gl_cv_func_printf_directive_n="guessing yes";; esac changequote([,])dnl ]) @@ -1076,6 +1092,7 @@ [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_REQUIRE([gl_SNPRINTF_PRESENCE]) AC_CACHE_CHECK([whether snprintf truncates the result as in C99], [gl_cv_func_snprintf_truncation_c99], [ @@ -1083,11 +1100,25 @@ [AC_LANG_SOURCE([[ #include #include +#if HAVE_SNPRINTF +# define my_snprintf snprintf +#else +# include +static int my_snprintf (char *buf, int size, const char *format, ...) +{ + va_list args; + int ret; + va_start (args, format); + ret = vsnprintf (buf, size, format, args); + va_end (args); + return ret; +} +#endif static char buf[100]; int main () { strcpy (buf, "ABCDEF"); - snprintf (buf, 3, "%d %d", 4567, 89); + my_snprintf (buf, 3, "%d %d", 4567, 89); if (memcmp (buf, "45\0DEF", 6) != 0) return 1; return 0; @@ -1157,6 +1188,7 @@ [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_REQUIRE([gl_SNPRINTF_PRESENCE]) AC_CACHE_CHECK([whether snprintf returns a byte count as in C99], [gl_cv_func_snprintf_retval_c99], [ @@ -1164,15 +1196,29 @@ [AC_LANG_SOURCE([[ #include #include +#if HAVE_SNPRINTF +# define my_snprintf snprintf +#else +# include +static int my_snprintf (char *buf, int size, const char *format, ...) +{ + va_list args; + int ret; + va_start (args, format); + ret = vsnprintf (buf, size, format, args); + va_end (args); + return ret; +} +#endif static char buf[100]; int main () { strcpy (buf, "ABCDEF"); - if (snprintf (buf, 3, "%d %d", 4567, 89) != 7) + if (my_snprintf (buf, 3, "%d %d", 4567, 89) != 7) return 1; - if (snprintf (buf, 0, "%d %d", 4567, 89) != 7) + if (my_snprintf (buf, 0, "%d %d", 4567, 89) != 7) return 2; - if (snprintf (NULL, 0, "%d %d", 4567, 89) != 7) + if (my_snprintf (NULL, 0, "%d %d", 4567, 89) != 7) return 3; return 0; }]])], @@ -1221,6 +1267,7 @@ [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_REQUIRE([gl_SNPRINTF_PRESENCE]) AC_CACHE_CHECK([whether snprintf fully supports the 'n' directive], [gl_cv_func_snprintf_directive_n], [ @@ -1228,6 +1275,20 @@ [AC_LANG_SOURCE([[ #include #include +#if HAVE_SNPRINTF +# define my_snprintf snprintf +#else +# include +static int my_snprintf (char *buf, int size, const char *format, ...) +{ + va_list args; + int ret; + va_start (args, format); + ret = vsnprintf (buf, size, format, args); + va_end (args); + return ret; +} +#endif static char fmtstring[10]; static char buf[100]; int main () @@ -1237,7 +1298,7 @@ support %n in format strings in read-only memory but not in writable memory. */ strcpy (fmtstring, "%d %n"); - snprintf (buf, 4, fmtstring, 12345, &count, 33, 44, 55); + my_snprintf (buf, 4, fmtstring, 12345, &count, 33, 44, 55); if (count != 6) return 1; return 0; @@ -1289,16 +1350,31 @@ AC_DEFUN([gl_SNPRINTF_SIZE1], [ AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gl_SNPRINTF_PRESENCE]) AC_CACHE_CHECK([whether snprintf respects a size of 1], [gl_cv_func_snprintf_size1], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include +#if HAVE_SNPRINTF +# define my_snprintf snprintf +#else +# include +static int my_snprintf (char *buf, int size, const char *format, ...) +{ + va_list args; + int ret; + va_start (args, format); + ret = vsnprintf (buf, size, format, args); + va_end (args); + return ret; +} +#endif int main() { static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; - snprintf (buf, 1, "%d", 12345); + my_snprintf (buf, 1, "%d", 12345); return buf[1] != 'E'; }]])], [gl_cv_func_snprintf_size1=yes], @@ -1484,5 +1560,6 @@ dnl Haiku . . . # # # . # . . . . . ? . . ? . . . dnl BeOS # # . # # # . ? # . ? . # ? . . ? . . . dnl old mingw / msvcrt # # # # # # . . # # . # # ? . # # # . . +dnl MSVC 9 # # # # # # # . # # . # # ? # # # # . . dnl mingw 2009-2011 . # . # . . . . # # . . . ? . . . . . . dnl mingw-w64 2011 # # # # # # . . # # . # # ? . # # # . . diff --git a/m4/vsnprintf-posix.m4 b/m4/vsnprintf-posix.m4 --- a/m4/vsnprintf-posix.m4 +++ b/m4/vsnprintf-posix.m4 @@ -1,4 +1,4 @@ -# vsnprintf-posix.m4 serial 14 +# vsnprintf-posix.m4 serial 15 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -23,7 +23,7 @@ gl_cv_func_vsnprintf_posix=no AC_CHECK_FUNCS([vsnprintf]) if test $ac_cv_func_vsnprintf = yes; then - dnl Assume that if vsnprintf() exists, snprintf() also exists. + dnl These tests use vsnprintf() if snprintf() does not exist. gl_SNPRINTF_TRUNCATION_C99 gl_SNPRINTF_RETVAL_C99 gl_SNPRINTF_DIRECTIVE_N