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:
19
ChangeLog
19
ChangeLog
@@ -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
|
||||
|
@@ -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.
|
||||
|
@@ -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.
|
||||
|
@@ -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.
|
||||
|
@@ -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.
|
||||
|
@@ -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.
|
||||
|
@@ -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.
|
||||
|
@@ -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.
|
||||
|
@@ -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.
|
||||
|
@@ -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.
|
||||
|
@@ -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.
|
||||
|
43
m4/printf.m4
43
m4/printf.m4
@@ -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];
|
||||
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";;
|
||||
@@ -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 # . # # # # . . . . . # . . . . . . . .
|
||||
|
Reference in New Issue
Block a user