diff options
author | Bruno Haible <bruno@clisp.org> | 2023-05-03 17:09:20 +0200 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2023-05-03 17:09:20 +0200 |
commit | 5826332ae5386719b3f34d3c94b4978910a9c0dc (patch) | |
tree | 8d55c6a27ca1f4c550b0f549eb495f1cd8404e84 /tests/test-vasnprintf-posix.c | |
parent | 18e6a048c8e85b29090cfed503c0d32a28feb090 (diff) | |
download | gnulib-5826332ae5386719b3f34d3c94b4978910a9c0dc.tar.gz |
vasnprintf, vasnwprintf: Make '0' flag handling more ISO C compliant.
* lib/vasnprintf.c (VASNPRINTF): When doing the padding ourselves,
ignore the '0' flag if a precision is specified and the conversion is
one of d, i, o, u, x, X, b, B.
* tests/test-vasnprintf-posix.c (test_function): Update expected results
accordingly.
* 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-vasnwprintf-posix.c (test_function): Likewise.
Diffstat (limited to 'tests/test-vasnprintf-posix.c')
-rw-r--r-- | tests/test-vasnprintf-posix.c | 18 |
1 files changed, 4 insertions, 14 deletions
diff --git a/tests/test-vasnprintf-posix.c b/tests/test-vasnprintf-posix.c index 51b1d26a33..33387c32e7 100644 --- a/tests/test-vasnprintf-posix.c +++ b/tests/test-vasnprintf-posix.c @@ -4145,14 +4145,9 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...)) char *result = my_asnprintf (NULL, &length, "%015.10x %d", 12348, 33, 44, 55); ASSERT (result != NULL); - /* Neither ISO C nor POSIX specify that the '0' flag is ignored when a width - and a precision are both present. But most implementations do so. */ - #ifdef __MINGW32__ - ASSERT (strcmp (result, "00000000000303c 33") == 0 /* mingw 5 */ - || strcmp (result, " 000000303c 33") == 0 /* mingw 10 */); - #else + /* ISO C 99 § 7.19.6.1.(6) says: "For d, i, o, u, x, and X conversions, if a + precision is specified, the 0 flag is ignored." */ ASSERT (strcmp (result, " 000000303c 33") == 0); - #endif ASSERT (length == strlen (result)); free (result); } @@ -4232,14 +4227,9 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...)) char *result = my_asnprintf (NULL, &length, "%0#15.10x %d", 12348, 33, 44, 55); ASSERT (result != NULL); - /* Neither ISO C nor POSIX specify that the '0' flag is ignored when a width - and a precision are both present. But most implementations do so. */ - #ifdef __MINGW32__ - ASSERT (strcmp (result, "0x000000000303c 33") == 0 /* mingw 5 */ - || strcmp (result, " 0x000000303c 33") == 0 /* mingw 10 */); - #else + /* ISO C 99 § 7.19.6.1.(6) says: "For d, i, o, u, x, and X conversions, if a + precision is specified, the 0 flag is ignored." */ ASSERT (strcmp (result, " 0x000000303c 33") == 0); - #endif ASSERT (length == strlen (result)); free (result); } |