1
0
mirror of https://git.savannah.gnu.org/git/gnulib.git synced 2025-08-17 12:41:05 +03:00

Work around a *printf bug with %ls on Solaris.

This commit is contained in:
Bruno Haible
2009-02-27 02:14:00 +01:00
parent f26544f660
commit f7beddb6d0
12 changed files with 92 additions and 10 deletions

View File

@@ -1,3 +1,22 @@
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

View File

@@ -38,6 +38,10 @@ Cygwin 1.5.x, 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.

View File

@@ -38,6 +38,10 @@ Cygwin 1.5.x, 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.

View File

@@ -32,6 +32,10 @@ Cygwin 1.5.x, 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.

View File

@@ -32,6 +32,10 @@ Cygwin 1.5.x, 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.

View File

@@ -43,6 +43,10 @@ Cygwin 1.5.x, 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.

View File

@@ -32,6 +32,10 @@ Cygwin 1.5.x, 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.

View File

@@ -32,6 +32,10 @@ Cygwin 1.5.x, 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.

View File

@@ -32,6 +32,10 @@ Cygwin 1.5.x, 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.

View File

@@ -43,6 +43,10 @@ Cygwin 1.5.x, 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.

View File

@@ -32,6 +32,10 @@ Cygwin 1.5.x, 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.

View File

@@ -1,4 +1,4 @@
# 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,
@@ -626,7 +626,10 @@ changequote([,])dnl
])
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],
@@ -646,19 +649,40 @@ 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];
/* 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';
sprintf (buf, "%ls", wstring);
return strcmp (buf, "abc") != 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";;
@@ -1362,9 +1386,8 @@ 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 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 # . # # # # . . . . . # . . . . . . . .