+2009-02-26 Eric Blake <ebb9@byu.net>
+ Bruno Haible <bruno@clisp.org>
+
+ Work around a *printf bug with %ls on Solaris.
+ * m4/printf.m4 (gl_PRINTF_DIRECTIVE_LS): Also test whether, when a
+ precision is specified, sprintf stops converting the wide string
+ argument when the number of bytes that have been produced by this
+ conversion equals or exceeds the precision.
+ * doc/posix-functions/fprintf.texi: Update.
+ * doc/posix-functions/printf.texi: Update.
+ * doc/posix-functions/snprintf.texi: Update.
+ * doc/posix-functions/sprintf.texi: Update.
+ * doc/posix-functions/vfprintf.texi: Update.
+ * doc/posix-functions/vprintf.texi: Update.
+ * doc/posix-functions/vsnprintf.texi: Update.
+ * doc/posix-functions/vsprintf.texi: Update.
+ * doc/glibc-functions/obstack_printf.texi: Update.
+ * doc/glibc-functions/obstack_vprintf.texi: Update.
+
2009-02-26 Eric Blake <ebb9@byu.net>
stdlib: favor compiler check of random.h
This function does not support the @samp{ls} directive on some platforms:
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
@item
+This function does not support precisions in the @samp{ls} directive correctly
+on some platforms:
+Solaris 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.
This function does not support the @samp{ls} directive on some platforms:
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
@item
+This function does not support precisions in the @samp{ls} directive correctly
+on some platforms:
+Solaris 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.
This function does not support the @samp{ls} directive on some platforms:
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
@item
+This function does not support precisions in the @samp{ls} directive correctly
+on some platforms:
+Solaris 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.
This function does not support the @samp{ls} directive on some platforms:
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
@item
+This function does not support precisions in the @samp{ls} directive correctly
+on some platforms:
+Solaris 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.
This function does not support the @samp{ls} directive on some platforms:
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
@item
+This function does not support precisions in the @samp{ls} directive correctly
+on some platforms:
+Solaris 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.
This function does not support the @samp{ls} directive on some platforms:
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
@item
+This function does not support precisions in the @samp{ls} directive correctly
+on some platforms:
+Solaris 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.
This function does not support the @samp{ls} directive on some platforms:
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
@item
+This function does not support precisions in the @samp{ls} directive correctly
+on some platforms:
+Solaris 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.
This function does not support the @samp{ls} directive on some platforms:
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
@item
+This function does not support precisions in the @samp{ls} directive correctly
+on some platforms:
+Solaris 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.
This function does not support the @samp{ls} directive on some platforms:
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
@item
+This function does not support precisions in the @samp{ls} directive correctly
+on some platforms:
+Solaris 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.
This function does not support the @samp{ls} directive on some platforms:
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
@item
+This function does not support precisions in the @samp{ls} directive correctly
+on some platforms:
+Solaris 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.
-# printf.m4 serial 30
+# printf.m4 serial 31
dnl Copyright (C) 2003, 2007-2009 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
])
dnl Test whether the *printf family of functions supports the %ls format
-dnl directive.
+dnl directive and in particular, when a precision is specified, whether
+dnl the functions stop converting the wide string argument when the number
+dnl of bytes that have been produced by this conversion equals or exceeds
+dnl the precision.
dnl Result is gl_cv_func_printf_directive_ls.
AC_DEFUN([gl_PRINTF_DIRECTIVE_LS],
#include <time.h>
#include <wchar.h>
#include <string.h>
-static wchar_t wstring[] = { 'a', 'b', 'c', 0 };
int main ()
{
char buf[100];
- buf[0] = '\0';
- sprintf (buf, "%ls", wstring);
- return strcmp (buf, "abc") != 0;
+ /* Test whether %ls works at all.
+ This test fails on OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku. */
+ {
+ static const wchar_t wstring[] = { 'a', 'b', 'c', 0 };
+ buf[0] = '\0';
+ if (sprintf (buf, "%ls", wstring) < 0
+ || strcmp (buf, "abc") != 0)
+ return 1;
+ }
+ /* Test whether precisions in %ls are supported as specified in ISO C 99
+ section 7.19.6.1:
+ "If a precision is specified, no more than that many bytes are written
+ (including shift sequences, if any), and the array shall contain a
+ null wide character if, to equal the multibyte character sequence
+ length given by the precision, the function would need to access a
+ wide character one past the end of the array."
+ This test fails on Solaris 10. */
+ {
+ static const wchar_t wstring[] = { 'a', 'b', (wchar_t) 0xfdfdfdfd, 0 };
+ buf[0] = '\0';
+ if (sprintf (buf, "%.2ls", wstring) < 0
+ || strcmp (buf, "ab") != 0)
+ return 1;
+ }
+ return 0;
}], [gl_cv_func_printf_directive_ls=yes], [gl_cv_func_printf_directive_ls=no],
[
changequote(,)dnl
case "$host_os" in
openbsd*) gl_cv_func_printf_directive_ls="guessing no";;
- solaris2.[1-6]*) gl_cv_func_printf_directive_ls="guessing no";;
+ solaris*) gl_cv_func_printf_directive_ls="guessing no";;
irix*) gl_cv_func_printf_directive_ls="guessing no";;
beos* | haiku*) gl_cv_func_printf_directive_ls="guessing no";;
*) gl_cv_func_printf_directive_ls="guessing yes";;
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 7 ... 9 # . # # # # . . . . . # . . . . . . . .
-dnl Solaris 2.6 # . # # # # . # . . . # . . . . . . . .
+dnl Solaris 10 . . # # # . . # . . . # . . . . . . . .
+dnl Solaris 2.6 ... 9 # . # # # # . # . . . # . . . . . . . .
dnl Solaris 2.5.1 # . # # # # . # . . . # . . # # # # # #
dnl AIX 5.2 . . # # # . . . . . . # . . . . . . . .
dnl AIX 4.3.2, 5.1 # . # # # # . . . . . # . . . . . . . .