[MSVCRT_WINETEST] Sync with Wine Staging 2.9. CORE-13362
[reactos.git] / rostests / winetests / msvcrt / scanf.c
index b09e7df..1d1f28e 100644 (file)
@@ -131,6 +131,13 @@ static void test_sscanf( void )
     ok( ret == 1, "Error with format \"%s\"\n","%*[a-cd-dg-e]%c");
     ok( buffer[0] == 'h', "Error with \"abcefgdh\" \"%c\"\n", buffer[0]);
 
+    buffer1[0] = 'b';
+    ret = sscanf("a","%s%s", buffer, buffer1);
+    ok( ret == 1, "expected 1, got %u\n", ret);
+    ok( buffer[0] == 'a', "buffer[0] = '%c'\n", buffer[0]);
+    ok( buffer[1] == '\0', "buffer[1] = '%c'\n", buffer[1]);
+    ok( buffer1[0] == 'b', "buffer1[0] = '%c'\n", buffer1[0]);
+
     /* check digits */
     ret = sprintf(buffer,"%d:%d:%d",hour,min,sec);
     ok( ret == 8, "expected 8, got %u\n", ret);
@@ -158,7 +165,7 @@ static void test_sscanf( void )
     ret = sscanf(buffer, "%lld", &result64);
     ok(ret == 1, "Wrong number of arguments read: %d\n", ret);
     ret = sprintf(buffer1, "%lld", result64);
-    ok(ret==14 || broken(ret==10), "sprintf retuned %d\n", ret);
+    ok(ret==14 || broken(ret==10), "sprintf returned %d\n", ret);
     if(ret == 14)
         ok(!strcmp(buffer, buffer1), "got %s, expected %s\n", buffer1, buffer);
 
@@ -237,6 +244,17 @@ static void test_sscanf( void )
     ret = sscanf(buffer, "%d:%d%n", &hour, &min, &number_so_far);
     ok(ret == 2, "Wrong number of arguments read: %d\n", ret);
     ok(number_so_far == 4, "%%n yielded wrong result: %d\n", number_so_far);
+
+    buffer[0] = 0;
+    buffer1[0] = 0;
+    ret = sscanf("test=value\xda", "%[^=] = %[^;]", buffer, buffer1);
+    ok(ret == 2, "got %d\n", ret);
+    ok(!strcmp(buffer, "test"), "buf %s\n", buffer);
+    ok(!strcmp(buffer1, "value\xda"), "buf %s\n", buffer1);
+
+    ret = sscanf("\x81\x82test", "\x81%\x82%s", buffer);
+    ok(ret == 1, "got %d\n", ret);
+    ok(!strcmp(buffer, "test"), "buf = %s\n", buffer);
 }
 
 static void test_sscanf_s(void)
@@ -285,6 +303,8 @@ static void test_swscanf( void )
     wchar_t buffer[100];
     int result, ret;
     static const WCHAR formatd[] = {'%','d',0};
+    const WCHAR format2[] = {'a',0x1234,'%',0x1234,'%','c',0};
+    WCHAR c;
 
     /* check WEOF */
     /* WEOF is an unsigned short -1 but swscanf returns int
@@ -294,6 +314,14 @@ static void test_swscanf( void )
     /* msvcrt returns 0 but should return -1 (later versions do) */
     ok( ret == (short)WEOF || broken(ret == 0),
         "swscanf returns %x instead of %x\n", ret, WEOF );
+
+    buffer[0] = 'a';
+    buffer[1] = 0x1234;
+    buffer[2] = 0x1234;
+    buffer[3] = 'b';
+    ret = swscanf(buffer, format2, &c);
+    ok(ret == 1, "swscanf returned %d\n", ret);
+    ok(c == 'b', "c = %x\n", c);
 }
 
 START_TEST(scanf)