In keeping with the theme of documenting relatively-unimportant Solaris bugs rather than working around them, I pushed this doc fix, the need for which I found when running "make check" with the latest coreutils.
Here's a simpler test case that illustrates the Solaris bug, in case there's anybody here who can get bug fixes into Solaris: #include <stdio.h> int main (void) { char buf[1000]; int n = snprintf (buf, sizeof buf, "%.511f", 1.0); printf ("%d %s\n", n, buf); return 0; } This prints "513 0.0...." rather than the correct "513 1.0....". >From 1c90a6dffb9b96d79188bee2924765d1ff8ce034 Mon Sep 17 00:00:00 2001 From: Paul Eggert <egg...@cs.ucla.edu> Date: Wed, 22 Dec 2010 15:13:59 -0800 Subject: [PATCH] doc: document Solaris printf bug with large float precisions * doc/posix-functions/dprintf.texi (dprintf): * doc/posix-functions/fprintf.texi (fprintf): * doc/posix-functions/printf.texi (printf): * doc/posix-functions/snprintf.texi (snprintf): * doc/posix-functions/sprintf.texi (sprintf): * doc/posix-functions/vdprintf.texi (vdprintf): * doc/posix-functions/vfprintf.texi (vfprintf): * doc/posix-functions/vprintf.texi (vprintf): * doc/posix-functions/vsnprintf.texi (vsnprintf): * doc/posix-functions/vsprintf.texi (vsprintf): Mention that these functions mishandle large floating point precisions on Solaris 10. The same bug is also present in Solaris 8, and I assume earlier. This causes "cd gnulib-tests; make check" to fail on Solaris 8 (and I assume, later) when building the latest coreutils, in test-vasprintf-posix's call to my_asprintf (&result, "%.4000f %d", 1.0, 99). I have not checked the wide flavors (e.g., wprintf) so this patch just updates the documentation for the narrow ones. --- ChangeLog | 20 ++++++++++++++++++++ doc/posix-functions/dprintf.texi | 5 +++++ doc/posix-functions/fprintf.texi | 5 +++++ doc/posix-functions/printf.texi | 5 +++++ doc/posix-functions/snprintf.texi | 5 +++++ doc/posix-functions/sprintf.texi | 5 +++++ doc/posix-functions/vdprintf.texi | 5 +++++ doc/posix-functions/vfprintf.texi | 5 +++++ doc/posix-functions/vprintf.texi | 5 +++++ doc/posix-functions/vsnprintf.texi | 5 +++++ doc/posix-functions/vsprintf.texi | 5 +++++ 11 files changed, 70 insertions(+), 0 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2dc4aeb..276a1ca 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,25 @@ 2010-12-22 Paul Eggert <egg...@cs.ucla.edu> + doc: document Solaris printf bug with large float precisions + * doc/posix-functions/dprintf.texi (dprintf): + * doc/posix-functions/fprintf.texi (fprintf): + * doc/posix-functions/printf.texi (printf): + * doc/posix-functions/snprintf.texi (snprintf): + * doc/posix-functions/sprintf.texi (sprintf): + * doc/posix-functions/vdprintf.texi (vdprintf): + * doc/posix-functions/vfprintf.texi (vfprintf): + * doc/posix-functions/vprintf.texi (vprintf): + * doc/posix-functions/vsnprintf.texi (vsnprintf): + * doc/posix-functions/vsprintf.texi (vsprintf): + Mention that these functions mishandle large floating point + precisions on Solaris 10. The same bug is also present in Solaris + 8, and I assume earlier. This causes "cd gnulib-tests; make + check" to fail on Solaris 8 (and I assume, later) when building + the latest coreutils, in test-vasprintf-posix's call to + my_asprintf (&result, "%.4000f %d", 1.0, 99). I have not checked + the wide flavors (e.g., wprintf) so this patch just updates the + documentation for the narrow ones. + test-posixtm.c: add two tests * tests/test-posixtm.c: Add two tests, to highlight the bug in Solaris 10 (and earlier) localtime. Gnulib doesn't work diff --git a/doc/posix-functions/dprintf.texi b/doc/posix-functions/dprintf.texi index dc39022..3f9f54b 100644 --- a/doc/posix-functions/dprintf.texi +++ b/doc/posix-functions/dprintf.texi @@ -24,4 +24,9 @@ glibc-2.3.6. Portability problems not fixed by Gnulib: @itemize +...@item +This function mishandles large floating point precisions +(for example, formatting 1.0 with @samp{"%.511f"}) +on some platforms: +Solaris 10. @end itemize diff --git a/doc/posix-functions/fprintf.texi b/doc/posix-functions/fprintf.texi index f394e88..116d20e 100644 --- a/doc/posix-functions/fprintf.texi +++ b/doc/posix-functions/fprintf.texi @@ -69,4 +69,9 @@ mingw. Portability problems not fixed by Gnulib: @itemize +...@item +This function mishandles large floating point precisions +(for example, formatting 1.0 with @samp{"%.511f"}) +on some platforms: +Solaris 10. @end itemize diff --git a/doc/posix-functions/printf.texi b/doc/posix-functions/printf.texi index b380ebc..fb894d6 100644 --- a/doc/posix-functions/printf.texi +++ b/doc/posix-functions/printf.texi @@ -69,4 +69,9 @@ mingw. Portability problems not fixed by Gnulib: @itemize +...@item +This function mishandles large floating point precisions +(for example, formatting 1.0 with @samp{"%.511f"}) +on some platforms: +Solaris 10. @end itemize diff --git a/doc/posix-functions/snprintf.texi b/doc/posix-functions/snprintf.texi index 9e8f5ad..23fa5e7 100644 --- a/doc/posix-functions/snprintf.texi +++ b/doc/posix-functions/snprintf.texi @@ -89,4 +89,9 @@ OSF/1 5.1. Portability problems not fixed by Gnulib: @itemize +...@item +This function mishandles large floating point precisions +(for example, formatting 1.0 with @samp{"%.511f"}) +on some platforms: +Solaris 10. @end itemize diff --git a/doc/posix-functions/sprintf.texi b/doc/posix-functions/sprintf.texi index 5ebd16f..cce9627 100644 --- a/doc/posix-functions/sprintf.texi +++ b/doc/posix-functions/sprintf.texi @@ -61,4 +61,9 @@ MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0. Portability problems not fixed by Gnulib: @itemize +...@item +This function mishandles large floating point precisions +(for example, formatting 1.0 with @samp{"%.511f"}) +on some platforms: +Solaris 10. @end itemize diff --git a/doc/posix-functions/vdprintf.texi b/doc/posix-functions/vdprintf.texi index 20a6ef7..3fa9b73 100644 --- a/doc/posix-functions/vdprintf.texi +++ b/doc/posix-functions/vdprintf.texi @@ -42,4 +42,9 @@ BeOS. Portability problems not fixed by Gnulib: @itemize +...@item +This function mishandles large floating point precisions +(for example, formatting 1.0 with @samp{"%.511f"}) +on some platforms: +Solaris 10. @end itemize diff --git a/doc/posix-functions/vfprintf.texi b/doc/posix-functions/vfprintf.texi index 179e67a..7f41c0d 100644 --- a/doc/posix-functions/vfprintf.texi +++ b/doc/posix-functions/vfprintf.texi @@ -69,4 +69,9 @@ mingw. Portability problems not fixed by Gnulib: @itemize +...@item +This function mishandles large floating point precisions +(for example, formatting 1.0 with @samp{"%.511f"}) +on some platforms: +Solaris 10. @end itemize diff --git a/doc/posix-functions/vprintf.texi b/doc/posix-functions/vprintf.texi index ac53388..213461c 100644 --- a/doc/posix-functions/vprintf.texi +++ b/doc/posix-functions/vprintf.texi @@ -69,4 +69,9 @@ mingw. Portability problems not fixed by Gnulib: @itemize +...@item +This function mishandles large floating point precisions +(for example, formatting 1.0 with @samp{"%.511f"}) +on some platforms: +Solaris 10. @end itemize diff --git a/doc/posix-functions/vsnprintf.texi b/doc/posix-functions/vsnprintf.texi index 9784f6d..8f6d903 100644 --- a/doc/posix-functions/vsnprintf.texi +++ b/doc/posix-functions/vsnprintf.texi @@ -89,4 +89,9 @@ HP-UX 11, OSF/1 5.1. Portability problems not fixed by Gnulib: @itemize +...@item +This function mishandles large floating point precisions +(for example, formatting 1.0 with @samp{"%.511f"}) +on some platforms: +Solaris 10. @end itemize diff --git a/doc/posix-functions/vsprintf.texi b/doc/posix-functions/vsprintf.texi index 82c7949..3178538 100644 --- a/doc/posix-functions/vsprintf.texi +++ b/doc/posix-functions/vsprintf.texi @@ -61,4 +61,9 @@ MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0. Portability problems not fixed by Gnulib: @itemize +...@item +This function mishandles large floating point precisions +(for example, formatting 1.0 with @samp{"%.511f"}) +on some platforms: +Solaris 10. @end itemize -- 1.7.2