+2010-12-24 Bruno Haible <bruno@clisp.org>
+
+ *printf: Detect large precisions bug on Solaris 10/SPARC.
+ * m4/printf.m4 (gl_PRINTF_PRECISION): Add one more test code, provided
+ by Paul Eggert.
+ * tests/test-snprintf-posix.h (test_function): Add this test code here
+ too.
+ * tests/test-sprintf-posix.h (test_function): Likewise.
+ * tests/test-vasnprintf-posix.c (test_function): Likewise.
+ * tests/test-vasprintf-posix.c (test_function): Likewise.
+ * doc/posix-functions/fprintf.texi: Mention Solaris 10 bug as worked
+ around by gnulib.
+ * doc/posix-functions/printf.texi: Likewise.
+ * doc/posix-functions/snprintf.texi: Likewise.
+ * doc/posix-functions/sprintf.texi: Likewise.
+ * doc/posix-functions/vfprintf.texi: Likewise.
+ * doc/posix-functions/vprintf.texi: Likewise.
+ * doc/posix-functions/vsnprintf.texi: Likewise.
+ * doc/posix-functions/vsprintf.texi: Likewise.
+ * doc/posix-functions/dprintf.texi: Undo last commit.
+ * doc/posix-functions/vdprintf.texi: Likewise.
+
2010-12-23 Paul Eggert <eggert@cs.ucla.edu>
tests: port test-fdutimensat.c to Solaris 8
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
floating-point and pointer output on some platforms:
Solaris 10/x86, mingw, BeOS.
@item
+This function mishandles large floating point precisions
+(for example, formatting 1.0 with @samp{"%.511f"})
+on some platforms:
+Solaris 10.
+@item
This function can crash in out-of-memory conditions on some platforms:
MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0.
@end itemize
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
floating-point and pointer output on some platforms:
Solaris 10/x86, mingw, BeOS.
@item
+This function mishandles large floating point precisions
+(for example, formatting 1.0 with @samp{"%.511f"})
+on some platforms:
+Solaris 10.
+@item
This function can crash in out-of-memory conditions on some platforms:
MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0.
@end itemize
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
floating-point and pointer output on some platforms:
Solaris 10/x86, mingw, BeOS.
@item
+This function mishandles large floating point precisions
+(for example, formatting 1.0 with @samp{"%.511f"})
+on some platforms:
+Solaris 10.
+@item
This function can crash in out-of-memory conditions on some platforms:
MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0.
@item
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
floating-point and pointer output on some platforms:
Solaris 10/x86, mingw, BeOS.
@item
+This function mishandles large floating point precisions
+(for example, formatting 1.0 with @samp{"%.511f"})
+on some platforms:
+Solaris 10.
+@item
This function can crash in out-of-memory conditions on some platforms:
MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0.
@end itemize
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
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
floating-point and pointer output on some platforms:
Solaris 10/x86, mingw, BeOS.
@item
+This function mishandles large floating point precisions
+(for example, formatting 1.0 with @samp{"%.511f"})
+on some platforms:
+Solaris 10.
+@item
This function can crash in out-of-memory conditions on some platforms:
MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0.
@end itemize
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
floating-point and pointer output on some platforms:
Solaris 10/x86, mingw, BeOS.
@item
+This function mishandles large floating point precisions
+(for example, formatting 1.0 with @samp{"%.511f"})
+on some platforms:
+Solaris 10.
+@item
This function can crash in out-of-memory conditions on some platforms:
MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0.
@end itemize
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
floating-point and pointer output on some platforms:
Solaris 10/x86, mingw, BeOS.
@item
+This function mishandles large floating point precisions
+(for example, formatting 1.0 with @samp{"%.511f"})
+on some platforms:
+Solaris 10.
+@item
This function can crash in out-of-memory conditions on some platforms:
MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0.
@item
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
floating-point and pointer output on some platforms:
Solaris 10/x86, mingw, BeOS.
@item
+This function mishandles large floating point precisions
+(for example, formatting 1.0 with @samp{"%.511f"})
+on some platforms:
+Solaris 10.
+@item
This function can crash in out-of-memory conditions on some platforms:
MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0.
@end itemize
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
-# printf.m4 serial 41
+# printf.m4 serial 42
dnl Copyright (C) 2003, 2007-2010 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 large precisions.
dnl On mingw, precisions larger than 512 are treated like 512, in integer,
dnl floating-point or pointer output. On Solaris 10/x86, precisions larger
-dnl than 510 in floating-point output crash the program. On BeOS, precisions
-dnl larger than 1044 crash the program.
+dnl than 510 in floating-point output crash the program. On Solaris 10/SPARC,
+dnl precisions larger than 510 in floating-point output yield wrong results.
+dnl On BeOS, precisions larger than 1044 crash the program.
dnl Result is gl_cv_func_printf_precision.
AC_DEFUN([gl_PRINTF_PRECISION],
result |= 1;
if (sprintf (buf, "%.4000f %d", 1.0, 33, 44) < 4000 + 5)
result |= 2;
+ if (sprintf (buf, "%.511f %d", 1.0, 33, 44) < 511 + 5
+ || buf[0] != '1')
+ result |= 4;
return result;
}]])],
[gl_cv_func_printf_precision=yes],
dnl Cygwin 1.5.19 (2006) # . . # # # . # . # . # # # . . . . . .
dnl Solaris 11 2010-11 . . # # # . . # . . . # . . . . . . . .
dnl Solaris 10 . . # # # . . # . . . # # . . . . . . .
-dnl Solaris 2.6 ... 9 # . # # # # . # . . . # . . . . # . . .
+dnl Solaris 2.6 ... 9 # . # # # # . # . . . # # . . . # . . .
dnl Solaris 2.5.1 # . # # # # . # . . . # . . # # # # # #
dnl AIX 5.2, 7.1 . . # # # . . . . . . # . . . . . . . .
dnl AIX 4.3.2, 5.1 # . # # # # . . . . . # . . . . # . . .
ASSERT (retval == strlen (result));
}
+ {
+ char result[1000];
+ int retval =
+ my_snprintf (result, sizeof (result), "%.511f %d", 1.0, 99);
+ size_t i;
+ ASSERT (result[0] == '1');
+ ASSERT (result[1] == '.');
+ for (i = 0; i < 511; i++)
+ ASSERT (result[2 + i] == '0');
+ ASSERT (strcmp (result + 2 + 511, " 99") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
{
char input[5000];
char result[5000];
ASSERT (retval == strlen (result));
}
+ {
+ char result[1000];
+ int retval =
+ my_sprintf (result, "%.511f %d", 1.0, 99);
+ size_t i;
+ ASSERT (result[0] == '1');
+ ASSERT (result[1] == '.');
+ for (i = 0; i < 511; i++)
+ ASSERT (result[2 + i] == '0');
+ ASSERT (strcmp (result + 2 + 511, " 99") == 0);
+ ASSERT (retval == strlen (result));
+ }
+
{
char input[5000];
char result[5000];
free (result);
}
+ {
+ size_t length;
+ char *result =
+ my_asnprintf (NULL, &length, "%.511f %d", 1.0, 99);
+ size_t i;
+ ASSERT (result != NULL);
+ ASSERT (result[0] == '1');
+ ASSERT (result[1] == '.');
+ for (i = 0; i < 511; i++)
+ ASSERT (result[2 + i] == '0');
+ ASSERT (strcmp (result + 2 + 511, " 99") == 0);
+ ASSERT (length == strlen (result));
+ free (result);
+ }
+
{
char input[5000];
size_t length;
free (result);
}
+ {
+ char *result;
+ int retval =
+ my_asprintf (&result, "%.511f %d", 1.0, 99);
+ size_t i;
+ ASSERT (result != NULL);
+ ASSERT (result[0] == '1');
+ ASSERT (result[1] == '.');
+ for (i = 0; i < 511; i++)
+ ASSERT (result[2 + i] == '0');
+ ASSERT (strcmp (result + 2 + 511, " 99") == 0);
+ ASSERT (retval == strlen (result));
+ free (result);
+ }
+
{
char input[5000];
char *result;