From f1d7a8f448765ceb7bd9856efc1c75a9d81e8090 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Wed, 11 Apr 2007 00:24:01 +0000 Subject: [PATCH] Guard against FreeBSD 6.1 bug. --- ChangeLog | 13 +++++++++++++ m4/printf.m4 | 7 ++++++- tests/test-fprintf-posix.h | 6 ++++++ tests/test-fprintf-posix.out | 2 ++ tests/test-snprintf-posix.h | 20 ++++++++++++-------- tests/test-sprintf-posix.h | 20 ++++++++++++-------- tests/test-vasnprintf-posix.c | 20 ++++++++++++-------- tests/test-vasprintf-posix.c | 20 ++++++++++++-------- 8 files changed, 75 insertions(+), 33 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8c792aee1..5d39800ba 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,18 @@ 2007-04-10 Bruno Haible + * m4/printf.m4 (gl_PRINTF_DIRECTIVE_A): Add a test for correct result + for NaN and Infinity. Needed on FreeBSD 6.1. + * tests/test-vasnprintf-posix.c (test_function): Undo last change + regarding results for "%010a" of Infinity and NaN. + * tests/test-vasprintf-posix.c (test_function): Likewise. + * tests/test-snprintf-posix.h (test_function): Likewise. + * tests/test-sprintf-posix.h (test_function): Likewise. + * tests/test-fprintf-posix.h (test_function): Likewise. + * tests/test-printf-posix.h (test_function): Likewise. + * tests/test-fprintf-posix.out: Likewise. + +2007-04-10 Bruno Haible + * modules/locale-tests: New file. * tests/test-locale.c: New file. diff --git a/m4/printf.m4 b/m4/printf.m4 index 3ce777c26..d39b42fd7 100644 --- a/m4/printf.m4 +++ b/m4/printf.m4 @@ -1,4 +1,4 @@ -# printf.m4 serial 4 +# printf.m4 serial 5 dnl Copyright (C) 2003, 2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -118,6 +118,11 @@ int main () && strcmp (result, "0x6.0ap-2 33") != 0 && strcmp (result, "0xc.14p-3 33") != 0)) return 1; + /* This catches a FreeBSD 6.1 bug. See + */ + if (sprintf (buf, "%010a %d", 1.0 / 0.0, 33, 44, 55) < 0 + || result[0] == '0') + return 1; /* This catches a MacOS X 10.3.9 (Darwin 7.9) bug. */ if (sprintf (buf, "%.1a", 1.999) < 0 || (strcmp (buf, "0x1.0p+1") != 0 diff --git a/tests/test-fprintf-posix.h b/tests/test-fprintf-posix.h index 488f842b6..2d5eb9303 100644 --- a/tests/test-fprintf-posix.h +++ b/tests/test-fprintf-posix.h @@ -61,6 +61,12 @@ test_function (int (*my_fprintf) (FILE *, const char *, ...)) /* NaN. */ my_fprintf (stdout, "%a %d\n", NaN (), 33, 44, 55); + /* FLAG_ZERO with infinite number. */ + my_fprintf (stdout, "%010a %d\n", 1.0 / 0.0, 33, 44, 55); + + /* FLAG_ZERO with NaN. */ + my_fprintf (stdout, "%010a %d\n", NaN (), 33, 44, 55); + /* Test the support of the POSIX/XSI format strings with positions. */ my_fprintf (stdout, "%2$d %1$d\n", 33, 55); diff --git a/tests/test-fprintf-posix.out b/tests/test-fprintf-posix.out index ef1c249a6..6f2e3d6db 100644 --- a/tests/test-fprintf-posix.out +++ b/tests/test-fprintf-posix.out @@ -6,4 +6,6 @@ inf 33 -inf 33 nan 33 + inf 33 + nan 33 55 33 diff --git a/tests/test-snprintf-posix.h b/tests/test-snprintf-posix.h index 48ef45387..012d5a3de 100644 --- a/tests/test-snprintf-posix.h +++ b/tests/test-snprintf-posix.h @@ -339,8 +339,9 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) char result[100]; int retval = my_snprintf (result, sizeof (result), "%010a %d", 1.0 / 0.0, 33, 44, 55); - ASSERT (strcmp (result, " inf 33") == 0 - || strcmp (result, "0000000inf 33") == 0); + /* "0000000inf 33" is not a valid result; see + */ + ASSERT (strcmp (result, " inf 33") == 0); ASSERT (retval == strlen (result)); } @@ -348,8 +349,9 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) char result[100]; int retval = my_snprintf (result, sizeof (result), "%010a %d", NaN (), 33, 44, 55); - ASSERT (strcmp (result, " nan 33") == 0 - || strcmp (result, "0000000nan 33") == 0); + /* "0000000nan 33" is not a valid result; see + */ + ASSERT (strcmp (result, " nan 33") == 0); ASSERT (retval == strlen (result)); } @@ -597,8 +599,9 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) char result[100]; int retval = my_snprintf (result, sizeof (result), "%010La %d", 1.0L / 0.0L, 33, 44, 55); - ASSERT (strcmp (result, " inf 33") == 0 - || strcmp (result, "0000000inf 33") == 0); + /* "0000000inf 33" is not a valid result; see + */ + ASSERT (strcmp (result, " inf 33") == 0); ASSERT (retval == strlen (result)); } @@ -606,8 +609,9 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) char result[100]; int retval = my_snprintf (result, sizeof (result), "%010La %d", 0.0L / 0.0L, 33, 44, 55); - ASSERT (strcmp (result, " nan 33") == 0 - || strcmp (result, "0000000nan 33") == 0); + /* "0000000nan 33" is not a valid result; see + */ + ASSERT (strcmp (result, " nan 33") == 0); ASSERT (retval == strlen (result)); } diff --git a/tests/test-sprintf-posix.h b/tests/test-sprintf-posix.h index e0645bafa..323a6541d 100644 --- a/tests/test-sprintf-posix.h +++ b/tests/test-sprintf-posix.h @@ -325,8 +325,9 @@ test_function (int (*my_sprintf) (char *, const char *, ...)) char result[1000]; int retval = my_sprintf (result, "%010a %d", 1.0 / 0.0, 33, 44, 55); - ASSERT (strcmp (result, " inf 33") == 0 - || strcmp (result, "0000000inf 33") == 0); + /* "0000000inf 33" is not a valid result; see + */ + ASSERT (strcmp (result, " inf 33") == 0); ASSERT (retval == strlen (result)); } @@ -334,8 +335,9 @@ test_function (int (*my_sprintf) (char *, const char *, ...)) char result[1000]; int retval = my_sprintf (result, "%010a %d", NaN (), 33, 44, 55); - ASSERT (strcmp (result, " nan 33") == 0 - || strcmp (result, "0000000nan 33") == 0); + /* "0000000nan 33" is not a valid result; see + */ + ASSERT (strcmp (result, " nan 33") == 0); ASSERT (retval == strlen (result)); } @@ -583,8 +585,9 @@ test_function (int (*my_sprintf) (char *, const char *, ...)) char result[1000]; int retval = my_sprintf (result, "%010La %d", 1.0L / 0.0L, 33, 44, 55); - ASSERT (strcmp (result, " inf 33") == 0 - || strcmp (result, "0000000inf 33") == 0); + /* "0000000inf 33" is not a valid result; see + */ + ASSERT (strcmp (result, " inf 33") == 0); ASSERT (retval == strlen (result)); } @@ -592,8 +595,9 @@ test_function (int (*my_sprintf) (char *, const char *, ...)) char result[1000]; int retval = my_sprintf (result, "%010La %d", 0.0L / 0.0L, 33, 44, 55); - ASSERT (strcmp (result, " nan 33") == 0 - || strcmp (result, "0000000nan 33") == 0); + /* "0000000nan 33" is not a valid result; see + */ + ASSERT (strcmp (result, " nan 33") == 0); ASSERT (retval == strlen (result)); } diff --git a/tests/test-vasnprintf-posix.c b/tests/test-vasnprintf-posix.c index fdfa3d564..0f158e11d 100644 --- a/tests/test-vasnprintf-posix.c +++ b/tests/test-vasnprintf-posix.c @@ -414,8 +414,9 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...)) char *result = my_asnprintf (NULL, &length, "%010a %d", 1.0 / 0.0, 33, 44, 55); ASSERT (result != NULL); - ASSERT (strcmp (result, " inf 33") == 0 - || strcmp (result, "0000000inf 33") == 0); + /* "0000000inf 33" is not a valid result; see + */ + ASSERT (strcmp (result, " inf 33") == 0); ASSERT (length == strlen (result)); free (result); } @@ -425,8 +426,9 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...)) char *result = my_asnprintf (NULL, &length, "%010a %d", NaN (), 33, 44, 55); ASSERT (result != NULL); - ASSERT (strcmp (result, " nan 33") == 0 - || strcmp (result, "0000000nan 33") == 0); + /* "0000000nan 33" is not a valid result; see + */ + ASSERT (strcmp (result, " nan 33") == 0); ASSERT (length == strlen (result)); free (result); } @@ -722,8 +724,9 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...)) char *result = my_asnprintf (NULL, &length, "%010La %d", 1.0L / 0.0L, 33, 44, 55); ASSERT (result != NULL); - ASSERT (strcmp (result, " inf 33") == 0 - || strcmp (result, "0000000inf 33") == 0); + /* "0000000inf 33" is not a valid result; see + */ + ASSERT (strcmp (result, " inf 33") == 0); ASSERT (length == strlen (result)); free (result); } @@ -733,8 +736,9 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...)) char *result = my_asnprintf (NULL, &length, "%010La %d", 0.0L / 0.0L, 33, 44, 55); ASSERT (result != NULL); - ASSERT (strcmp (result, " nan 33") == 0 - || strcmp (result, "0000000nan 33") == 0); + /* "0000000nan 33" is not a valid result; see + */ + ASSERT (strcmp (result, " nan 33") == 0); ASSERT (length == strlen (result)); free (result); } diff --git a/tests/test-vasprintf-posix.c b/tests/test-vasprintf-posix.c index 2f3c318a3..433362200 100644 --- a/tests/test-vasprintf-posix.c +++ b/tests/test-vasprintf-posix.c @@ -395,8 +395,9 @@ test_function (int (*my_asprintf) (char **, const char *, ...)) int retval = my_asprintf (&result, "%010a %d", 1.0 / 0.0, 33, 44, 55); ASSERT (result != NULL); - ASSERT (strcmp (result, " inf 33") == 0 - || strcmp (result, "0000000inf 33") == 0); + /* "0000000inf 33" is not a valid result; see + */ + ASSERT (strcmp (result, " inf 33") == 0); ASSERT (retval == strlen (result)); free (result); } @@ -406,8 +407,9 @@ test_function (int (*my_asprintf) (char **, const char *, ...)) int retval = my_asprintf (&result, "%010a %d", NaN (), 33, 44, 55); ASSERT (result != NULL); - ASSERT (strcmp (result, " nan 33") == 0 - || strcmp (result, "0000000nan 33") == 0); + /* "0000000nan 33" is not a valid result; see + */ + ASSERT (strcmp (result, " nan 33") == 0); ASSERT (retval == strlen (result)); free (result); } @@ -703,8 +705,9 @@ test_function (int (*my_asprintf) (char **, const char *, ...)) int retval = my_asprintf (&result, "%010La %d", 1.0L / 0.0L, 33, 44, 55); ASSERT (result != NULL); - ASSERT (strcmp (result, " inf 33") == 0 - || strcmp (result, "0000000inf 33") == 0); + /* "0000000inf 33" is not a valid result; see + */ + ASSERT (strcmp (result, " inf 33") == 0); ASSERT (retval == strlen (result)); free (result); } @@ -714,8 +717,9 @@ test_function (int (*my_asprintf) (char **, const char *, ...)) int retval = my_asprintf (&result, "%010La %d", 0.0L / 0.0L, 33, 44, 55); ASSERT (result != NULL); - ASSERT (strcmp (result, " nan 33") == 0 - || strcmp (result, "0000000nan 33") == 0); + /* "0000000nan 33" is not a valid result; see + */ + ASSERT (strcmp (result, " nan 33") == 0); ASSERT (retval == strlen (result)); free (result); } -- 2.11.0