Nikolay Sivov : msvcrt: Fix char to int promotion that breaks pattern lookup.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Feb 3 07:40:00 CST 2016


Module: wine
Branch: stable
Commit: 505941520793786cdd96ef4165a644a04dd7ab8d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=505941520793786cdd96ef4165a644a04dd7ab8d

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Wed Dec 23 01:14:28 2015 +0300

msvcrt: Fix char to int promotion that breaks pattern lookup.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit d99727bcb3f211b39421b1d738a3d3165fb82d78)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>

---

 dlls/msvcrt/scanf.h       | 8 ++++++++
 dlls/msvcrt/tests/scanf.c | 7 +++++++
 2 files changed, 15 insertions(+)

diff --git a/dlls/msvcrt/scanf.h b/dlls/msvcrt/scanf.h
index 9322704..5bf91a6 100644
--- a/dlls/msvcrt/scanf.h
+++ b/dlls/msvcrt/scanf.h
@@ -68,7 +68,11 @@
 #undef _EOF_
 #define _EOF_ 0
 #ifdef STRING_LEN
+#ifdef WIDE_CHAR
 #define _GETC_(file) (consumed==length ? '\0' : (consumed++, *file++))
+#else /* WIDE_CHAR */
+#define _GETC_(file) (consumed==length ? '\0' : (consumed++, (unsigned char)*file++))
+#endif /* WIDE_CHAR */
 #define _UNGETC_(nch, file) do { file--; consumed--; } while(0)
 #define _LOCK_FILE_(file) do {} while(0)
 #define _UNLOCK_FILE_(file) do {} while(0)
@@ -86,7 +90,11 @@
 #endif /* SECURE */
 #endif /* WIDE_SCANF */
 #else /* STRING_LEN */
+#ifdef WIDE_CHAR
 #define _GETC_(file) (consumed++, *file++)
+#else /* WIDE_CHAR */
+#define _GETC_(file) (consumed++, (unsigned char)*file++)
+#endif /* WIDE_CHAR */
 #define _UNGETC_(nch, file) do { file--; consumed--; } while(0)
 #define _LOCK_FILE_(file) do {} while(0)
 #define _UNLOCK_FILE_(file) do {} while(0)
diff --git a/dlls/msvcrt/tests/scanf.c b/dlls/msvcrt/tests/scanf.c
index 3c5a05e..6cb85fa 100644
--- a/dlls/msvcrt/tests/scanf.c
+++ b/dlls/msvcrt/tests/scanf.c
@@ -244,6 +244,13 @@ 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);
 }
 
 static void test_sscanf_s(void)




More information about the wine-cvs mailing list