New snprintf test

Ferenc Wagner wferi at afavant.elte.hu
Thu Oct 30 18:34:28 CST 2003


Under Wine I see libc 2.1+ behaviour, on XP pre-2.1
behaviour with respect to the return value of snprintf.

This test may not belong to scanf.c, but it has already
contained an sprintf test, so I decided to go on.  Drop me a
mail if those should be moved into some other file instead.

Index: scanf.c
===================================================================
RCS file: /home/wine/wine/dlls/msvcrt/tests/scanf.c,v
retrieving revision 1.9
diff -u -r1.9 scanf.c
--- scanf.c	28 Oct 2003 00:04:42 -0000	1.9
+++ scanf.c	31 Oct 2003 00:22:52 -0000
@@ -92,8 +92,35 @@
       }
 }
 
+static void test_snprintf (void)
+{
+    struct snprintf_test {
+        const char *format;
+        int expected;
+    };
+    /* Pre-2.1 libc behaviour, not C99 compliant. */
+    const struct snprintf_test tests[] = {{"short", 5},
+                                          {"justfit", 7},
+                                          {"justfits", 8},
+                                          {"muchlonger", -1}};
+    char buffer[8];
+    const int bufsiz = sizeof buffer;
+    unsigned int i;
+
+    for (i = 0; i < sizeof tests / sizeof tests[0]; i++) {
+        const char *f = tests[i].format;
+        const int e   = tests[i].expected;
+        const int n   = _snprintf (buffer, bufsiz, f);
+        const int v   = n < 0 ? bufsiz : (n == bufsiz ? n : n+1);
+
+        ok (n == e, "\"%s\": expected %d, got %d", f, e, n);
+        ok (!memcmp (f, buffer, v), "\"%s\": got \"%.*s\"", f, v, buffer);
+    };
+}
+
 START_TEST(scanf)
 {
     test_sscanf();
     test_sprintf();
+    test_snprintf();
 }



More information about the wine-patches mailing list