[PATCH v2] ucrtbase: Extend the printf tests even further
Martin Storsjo
martin at martin.st
Tue May 19 16:44:14 CDT 2020
Signed-off-by: Martin Storsjo <martin at martin.st>
---
Changed syntax for sizeof, using ARRAY_SIZE as suggested.
---
dlls/ucrtbase/tests/printf.c | 93 +++++++++++++++++++-----------------
1 file changed, 48 insertions(+), 45 deletions(-)
diff --git a/dlls/ucrtbase/tests/printf.c b/dlls/ucrtbase/tests/printf.c
index 3b48e08b10..7647ac57e2 100644
--- a/dlls/ucrtbase/tests/printf.c
+++ b/dlls/ucrtbase/tests/printf.c
@@ -90,52 +90,55 @@ static int WINAPIV vsprintf_wrapper(unsigned __int64 options, char *str,
static void test_snprintf (void)
{
- const char *tests[] = {"short", "justfit", "justfits", "muchlonger"};
+ const char *tests[] = {"short", "justfit", "justfits", "muchlonger", "", "1"};
char buffer[8];
- const int bufsiz = sizeof buffer;
- unsigned int i;
-
- /* Legacy _snprintf style termination */
- for (i = 0; i < ARRAY_SIZE(tests); i++) {
- const char *fmt = tests[i];
- const int expect = strlen(fmt) > bufsiz ? -1 : strlen(fmt);
- const int n = vsprintf_wrapper (_CRT_INTERNAL_PRINTF_LEGACY_VSPRINTF_NULL_TERMINATION, buffer, bufsiz, fmt);
- const int valid = n < 0 ? bufsiz : (n == bufsiz ? n : n+1);
-
- ok (n == expect, "\"%s\": expected %d, returned %d\n",
- fmt, expect, n);
- ok (!memcmp (fmt, buffer, valid),
- "\"%s\": rendered \"%.*s\"\n", fmt, valid, buffer);
- }
-
- /* C99 snprintf style termination */
- for (i = 0; i < ARRAY_SIZE(tests); i++) {
- const char *fmt = tests[i];
- const int expect = strlen(fmt);
- const int n = vsprintf_wrapper (_CRT_INTERNAL_PRINTF_STANDARD_SNPRINTF_BEHAVIOR, buffer, bufsiz, fmt);
- const int valid = n >= bufsiz ? bufsiz - 1 : n < 0 ? 0 : n;
-
- ok (n == expect, "\"%s\": expected %d, returned %d\n",
- fmt, expect, n);
- ok (!memcmp (fmt, buffer, valid),
- "\"%s\": rendered \"%.*s\"\n", fmt, valid, buffer);
- ok (buffer[valid] == '\0',
- "\"%s\": Missing null termination (ret %d) - is %d\n", fmt, n, buffer[valid]);
- }
-
- /* swprintf style termination */
- for (i = 0; i < ARRAY_SIZE(tests); i++) {
- const char *fmt = tests[i];
- const int expect = strlen(fmt) >= bufsiz ? -2 : strlen(fmt);
- const int n = vsprintf_wrapper (0, buffer, bufsiz, fmt);
- const int valid = n < 0 ? bufsiz - 1 : n;
-
- ok (n == expect, "\"%s\": expected %d, returned %d\n",
- fmt, expect, n);
- ok (!memcmp (fmt, buffer, valid),
- "\"%s\": rendered \"%.*s\"\n", fmt, valid, buffer);
- ok (buffer[valid] == '\0',
- "\"%s\": Missing null termination (ret %d) - is %d\n", fmt, n, buffer[valid]);
+ int bufsizes[] = { 0, 1, sizeof(buffer) };
+ unsigned int i, j;
+
+ for (j = 0; j < ARRAY_SIZE(bufsizes); j++) {
+ const int bufsiz = bufsizes[j];
+ /* Legacy _snprintf style termination */
+ for (i = 0; i < ARRAY_SIZE(tests); i++) {
+ const char *fmt = tests[i];
+ const int expect = strlen(fmt) > bufsiz ? -1 : strlen(fmt);
+ const int n = vsprintf_wrapper (_CRT_INTERNAL_PRINTF_LEGACY_VSPRINTF_NULL_TERMINATION, buffer, bufsiz, fmt);
+ const int valid = n < 0 ? bufsiz : (n == bufsiz ? n : n+1);
+
+ ok (n == expect, "\"%s\": expected %d, returned %d\n",
+ fmt, expect, n);
+ ok (!memcmp (fmt, buffer, valid),
+ "\"%s\": rendered \"%.*s\"\n", fmt, valid, buffer);
+ }
+
+ /* C99 snprintf style termination */
+ for (i = 0; i < ARRAY_SIZE(tests); i++) {
+ const char *fmt = tests[i];
+ const int expect = strlen(fmt);
+ const int n = vsprintf_wrapper (_CRT_INTERNAL_PRINTF_STANDARD_SNPRINTF_BEHAVIOR, buffer, bufsiz, fmt);
+ const int valid = n >= bufsiz ? (bufsiz > 0 ? bufsiz - 1 : 0) : n < 0 ? 0 : n;
+
+ ok (n == expect, "\"%s\": expected %d, returned %d\n",
+ fmt, expect, n);
+ ok (!memcmp (fmt, buffer, valid),
+ "\"%s\": rendered \"%.*s\" bufsiz %d\n", fmt, valid, buffer, bufsiz);
+ ok (bufsiz == 0 || buffer[valid] == '\0',
+ "\"%s\": Missing null termination (ret %d) - is %d (bufsiz %d)\n", fmt, n, buffer[valid], bufsiz);
+ }
+
+ /* swprintf style termination */
+ for (i = 0; i < ARRAY_SIZE(tests); i++) {
+ const char *fmt = tests[i];
+ const int expect = strlen(fmt) >= bufsiz ? bufsiz > 0 ? -2 : -1 : strlen(fmt);
+ const int n = vsprintf_wrapper (0, buffer, bufsiz, fmt);
+ const int valid = n < 0 ? bufsiz > 0 ? bufsiz - 1 : 0 : n;
+
+ ok (n == expect, "\"%s\": expected %d, returned %d\n",
+ fmt, expect, n);
+ ok (!memcmp (fmt, buffer, valid),
+ "\"%s\": rendered \"%.*s\" bufsiz %d\n", fmt, valid, buffer, bufsiz);
+ ok (bufsiz == 0 || buffer[valid] == '\0',
+ "\"%s\": Missing null termination (ret %d) - is %d\n", fmt, n, buffer[valid]);
+ }
}
ok (vsprintf_wrapper (_CRT_INTERNAL_PRINTF_STANDARD_SNPRINTF_BEHAVIOR, NULL, 0, "abcd") == 4,
--
2.17.1
More information about the wine-devel
mailing list