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>
|
2009-02-26 Eric Blake <ebb9@byu.net>
|
||||||
|
|
||||||
stdlib: favor compiler check of random.h
|
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:
|
This function does not support the @samp{ls} directive on some platforms:
|
||||||
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
|
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
|
||||||
@item
|
@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
|
This function does not support format directives that access arguments in an
|
||||||
arbitrary order, such as @code{"%2$s"}, on some platforms:
|
arbitrary order, such as @code{"%2$s"}, on some platforms:
|
||||||
NetBSD 3.0, mingw, BeOS.
|
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:
|
This function does not support the @samp{ls} directive on some platforms:
|
||||||
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
|
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
|
||||||
@item
|
@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
|
This function does not support format directives that access arguments in an
|
||||||
arbitrary order, such as @code{"%2$s"}, on some platforms:
|
arbitrary order, such as @code{"%2$s"}, on some platforms:
|
||||||
NetBSD 3.0, mingw, BeOS.
|
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:
|
This function does not support the @samp{ls} directive on some platforms:
|
||||||
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
|
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
|
||||||
@item
|
@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
|
This function does not support format directives that access arguments in an
|
||||||
arbitrary order, such as @code{"%2$s"}, on some platforms:
|
arbitrary order, such as @code{"%2$s"}, on some platforms:
|
||||||
NetBSD 3.0, mingw, BeOS.
|
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:
|
This function does not support the @samp{ls} directive on some platforms:
|
||||||
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
|
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
|
||||||
@item
|
@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
|
This function does not support format directives that access arguments in an
|
||||||
arbitrary order, such as @code{"%2$s"}, on some platforms:
|
arbitrary order, such as @code{"%2$s"}, on some platforms:
|
||||||
NetBSD 3.0, mingw, BeOS.
|
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:
|
This function does not support the @samp{ls} directive on some platforms:
|
||||||
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
|
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
|
||||||
@item
|
@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
|
This function does not support format directives that access arguments in an
|
||||||
arbitrary order, such as @code{"%2$s"}, on some platforms:
|
arbitrary order, such as @code{"%2$s"}, on some platforms:
|
||||||
NetBSD 3.0, mingw, BeOS.
|
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:
|
This function does not support the @samp{ls} directive on some platforms:
|
||||||
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
|
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
|
||||||
@item
|
@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
|
This function does not support format directives that access arguments in an
|
||||||
arbitrary order, such as @code{"%2$s"}, on some platforms:
|
arbitrary order, such as @code{"%2$s"}, on some platforms:
|
||||||
NetBSD 3.0, mingw, BeOS.
|
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:
|
This function does not support the @samp{ls} directive on some platforms:
|
||||||
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
|
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
|
||||||
@item
|
@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
|
This function does not support format directives that access arguments in an
|
||||||
arbitrary order, such as @code{"%2$s"}, on some platforms:
|
arbitrary order, such as @code{"%2$s"}, on some platforms:
|
||||||
NetBSD 3.0, mingw, BeOS.
|
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:
|
This function does not support the @samp{ls} directive on some platforms:
|
||||||
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
|
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
|
||||||
@item
|
@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
|
This function does not support format directives that access arguments in an
|
||||||
arbitrary order, such as @code{"%2$s"}, on some platforms:
|
arbitrary order, such as @code{"%2$s"}, on some platforms:
|
||||||
NetBSD 3.0, mingw, BeOS.
|
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:
|
This function does not support the @samp{ls} directive on some platforms:
|
||||||
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
|
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
|
||||||
@item
|
@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
|
This function does not support format directives that access arguments in an
|
||||||
arbitrary order, such as @code{"%2$s"}, on some platforms:
|
arbitrary order, such as @code{"%2$s"}, on some platforms:
|
||||||
NetBSD 3.0, mingw, BeOS.
|
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:
|
This function does not support the @samp{ls} directive on some platforms:
|
||||||
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
|
OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku.
|
||||||
@item
|
@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
|
This function does not support format directives that access arguments in an
|
||||||
arbitrary order, such as @code{"%2$s"}, on some platforms:
|
arbitrary order, such as @code{"%2$s"}, on some platforms:
|
||||||
NetBSD 3.0, mingw, BeOS.
|
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 Copyright (C) 2003, 2007-2009 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
dnl gives unlimited permission to copy and/or distribute it,
|
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 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.
|
dnl Result is gl_cv_func_printf_directive_ls.
|
||||||
|
|
||||||
AC_DEFUN([gl_PRINTF_DIRECTIVE_LS],
|
AC_DEFUN([gl_PRINTF_DIRECTIVE_LS],
|
||||||
@@ -646,19 +649,40 @@ AC_DEFUN([gl_PRINTF_DIRECTIVE_LS],
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <wchar.h>
|
#include <wchar.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
static wchar_t wstring[] = { 'a', 'b', 'c', 0 };
|
|
||||||
int main ()
|
int main ()
|
||||||
{
|
{
|
||||||
char buf[100];
|
char buf[100];
|
||||||
buf[0] = '\0';
|
/* Test whether %ls works at all.
|
||||||
sprintf (buf, "%ls", wstring);
|
This test fails on OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku. */
|
||||||
return strcmp (buf, "abc") != 0;
|
{
|
||||||
|
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],
|
}], [gl_cv_func_printf_directive_ls=yes], [gl_cv_func_printf_directive_ls=no],
|
||||||
[
|
[
|
||||||
changequote(,)dnl
|
changequote(,)dnl
|
||||||
case "$host_os" in
|
case "$host_os" in
|
||||||
openbsd*) gl_cv_func_printf_directive_ls="guessing no";;
|
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";;
|
irix*) gl_cv_func_printf_directive_ls="guessing no";;
|
||||||
beos* | haiku*) 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";;
|
*) 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 OpenBSD 3.9, 4.0 . . # # # # . # . # . # . # . . . . . .
|
||||||
dnl Cygwin 2007 (= Cygwin 1.5.24) . . . . # # . . . . ? # ? ? . . . . . .
|
dnl Cygwin 2007 (= Cygwin 1.5.24) . . . . # # . . . . ? # ? ? . . . . . .
|
||||||
dnl Cygwin 2006 (= Cygwin 1.5.19) # . . . # # . ? . # ? # ? ? . . . . . .
|
dnl Cygwin 2006 (= Cygwin 1.5.19) # . . . # # . ? . # ? # ? ? . . . . . .
|
||||||
dnl Solaris 10 . . # # # . . . . . . # . . . . . . . .
|
dnl Solaris 10 . . # # # . . # . . . # . . . . . . . .
|
||||||
dnl Solaris 7 ... 9 # . # # # # . . . . . # . . . . . . . .
|
dnl Solaris 2.6 ... 9 # . # # # # . # . . . # . . . . . . . .
|
||||||
dnl Solaris 2.6 # . # # # # . # . . . # . . . . . . . .
|
|
||||||
dnl Solaris 2.5.1 # . # # # # . # . . . # . . # # # # # #
|
dnl Solaris 2.5.1 # . # # # # . # . . . # . . # # # # # #
|
||||||
dnl AIX 5.2 . . # # # . . . . . . # . . . . . . . .
|
dnl AIX 5.2 . . # # # . . . . . . # . . . . . . . .
|
||||||
dnl AIX 4.3.2, 5.1 # . # # # # . . . . . # . . . . . . . .
|
dnl AIX 4.3.2, 5.1 # . # # # # . . . . . # . . . . . . . .
|
||||||
|
Reference in New Issue
Block a user