Huw Davies : user32: Use MB_USEGLYPHCHARS in OemToCharBuffW().

Alexandre Julliard julliard at winehq.org
Thu Sep 22 10:00:02 CDT 2016


Module: wine
Branch: master
Commit: ddc165850147735f8958212337db47636b8f935f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ddc165850147735f8958212337db47636b8f935f

Author: Huw Davies <huw at codeweavers.com>
Date:   Thu Sep 22 11:12:37 2016 +0100

user32: Use MB_USEGLYPHCHARS in OemToCharBuffW().

OemToCharBuffA() is more complicated and looks like it will require a
custom table, so that is left as is.

Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/user32/lstr.c       |  2 +-
 dlls/user32/tests/text.c | 12 ++++++++++++
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/dlls/user32/lstr.c b/dlls/user32/lstr.c
index 42e55c0..80a2cfb 100644
--- a/dlls/user32/lstr.c
+++ b/dlls/user32/lstr.c
@@ -218,7 +218,7 @@ BOOL WINAPI OemToCharBuffA( LPCSTR s, LPSTR d, DWORD len )
 BOOL WINAPI OemToCharBuffW( LPCSTR s, LPWSTR d, DWORD len )
 {
     if (!s || !d) return FALSE;
-    MultiByteToWideChar( CP_OEMCP, 0, s, len, d, len );
+    MultiByteToWideChar( CP_OEMCP, MB_PRECOMPOSED | MB_USEGLYPHCHARS, s, len, d, len );
     return TRUE;
 }
 
diff --git a/dlls/user32/tests/text.c b/dlls/user32/tests/text.c
index bebf6a0..3cc9571 100644
--- a/dlls/user32/tests/text.c
+++ b/dlls/user32/tests/text.c
@@ -26,6 +26,7 @@
 #include "wingdi.h"
 #include "winuser.h"
 #include "winerror.h"
+#include "winnls.h"
 
 #define MODIFIED(rect) (rect.left == 10 && rect.right != 100 && rect.top == 10 && rect.bottom != 100)
 #define EMPTY(rect) (rect.left == rect.right && rect.bottom == rect.top)
@@ -746,6 +747,8 @@ static void test_CharToOem_OemToChar(void)
     };
     BOOL ret;
     int i;
+    char oem;
+    WCHAR uni, expect;
 
     for (i = 0; i < sizeof(tests)/sizeof(tests[0]); i++)
     {
@@ -807,6 +810,15 @@ static void test_CharToOem_OemToChar(void)
         ok(ret == tests[i].ret, "test %d: expected %d, got %d\n", i, tests[i].ret, ret);
         ok(!lstrcmpW(buf, expected), "test %d: got '%s'\n", i, wine_dbgstr_w(buf));
     }
+
+    for (i = 0; i < 0x100; i++)
+    {
+        oem = i;
+        ret = OemToCharBuffW( &oem, &uni, 1 );
+        ok( ret, "%02x: returns FALSE\n", i );
+        MultiByteToWideChar( CP_OEMCP, MB_PRECOMPOSED | MB_USEGLYPHCHARS, &oem, 1, &expect, 1 );
+        ok( uni == expect, "%02x: got %04x expected %04x\n", i, uni, expect );
+    }
 }
 
 START_TEST(text)




More information about the wine-cvs mailing list