kernel32/locale:Fix some bugs about special Chinese test in parse_locale_name()

THuang matrix95 at foxmail.com
Fri Apr 14 05:48:29 CDT 2017


-------------- next part --------------
>From a185082c0240a818d2237df3c326372168592a3d Mon Sep 17 00:00:00 2001
From: THuang <loagen95 at gmail.com>
Date: Fri, 14 Apr 2017 05:26:50 -0400
Subject: [PATCH] kernel32/locale:Fix some bugs about special Chinese test in
 parse_locale_name()

Signed-off-by: THuang <loagen95 at gmail.com>
---
 dlls/kernel32/locale.c       | 12 ++++++++++++
 dlls/kernel32/tests/locale.c | 22 ++++++++++++++--------
 2 files changed, 26 insertions(+), 8 deletions(-)

diff --git a/dlls/kernel32/locale.c b/dlls/kernel32/locale.c
index e14aedbe44..b475d442a0 100644
--- a/dlls/kernel32/locale.c
+++ b/dlls/kernel32/locale.c
@@ -457,6 +457,8 @@ static void parse_locale_name( const WCHAR *str, struct locale_name *name )
     static const WCHAR cW[] = {'C',0};
     static const WCHAR latinW[] = {'l','a','t','i','n',0};
     static const WCHAR latnW[] = {'-','L','a','t','n',0};
+    static const WCHAR HantW[] = {'-','H','a','n','t',0};
+    static const WCHAR HansW[] = {'-','H','a','n','s',0};
     WCHAR *p;
 
     TRACE("%s\n", debugstr_w(str));
@@ -487,6 +489,16 @@ static void parse_locale_name( const WCHAR *str, struct locale_name *name )
     else if (*p == '-')  /* Windows format */
     {
         strcpyW( name->win_name, name->lang );
+        if(!strcmpiW(p,HantW)){
+            name->lcid = 0x0c04;
+            name->matches = 2;
+            return ;
+        }
+        if(!strcmpiW(p,HansW)){
+            name->lcid = 0x0804;
+            name->matches = 2;
+            return ;
+        }
         *p++ = 0;
         name->country = p;
         if (!(p = strpbrkW( p, winsepW ))) goto done;
diff --git a/dlls/kernel32/tests/locale.c b/dlls/kernel32/tests/locale.c
index 86fcc33b70..a1d41935a1 100644
--- a/dlls/kernel32/tests/locale.c
+++ b/dlls/kernel32/tests/locale.c
@@ -2781,40 +2781,40 @@ static void test_LocaleNameToLCID(void)
 
         /* zh-Hant */
         lcid = pLocaleNameToLCID(zhHantW, 0);
-        todo_wine ok(lcid == MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_HONGKONG), SORT_DEFAULT),
+        ok(lcid == MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_HONGKONG), SORT_DEFAULT),
            "%s: got wrong lcid 0x%04x\n", wine_dbgstr_w(zhHantW), lcid);
         ret = pLCIDToLocaleName(lcid, buffer, sizeof(buffer)/sizeof(WCHAR), 0);
         ok(ret > 0, "%s: got %d\n", wine_dbgstr_w(zhHantW), ret);
-        todo_wine ok(!lstrcmpW(zhhkW, buffer), "%s: got wrong locale name %s\n",
+        ok(!lstrcmpW(zhhkW, buffer), "%s: got wrong locale name %s\n",
            wine_dbgstr_w(zhHantW), wine_dbgstr_w(buffer));
 
         /* zh-hant */
         lcid = pLocaleNameToLCID(zhhantW, 0);
-        todo_wine ok(lcid == MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_HONGKONG), SORT_DEFAULT),
+        ok(lcid == MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_HONGKONG), SORT_DEFAULT),
            "%s: got wrong lcid 0x%04x\n", wine_dbgstr_w(zhhantW),
            MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_HONGKONG), SORT_DEFAULT));
         ret = pLCIDToLocaleName(lcid, buffer, sizeof(buffer)/sizeof(WCHAR), 0);
         ok(ret > 0, "%s: got %d\n", wine_dbgstr_w(zhhantW), ret);
-        todo_wine ok(!lstrcmpW(zhhkW, buffer), "%s: got wrong locale name %s\n",
+        ok(!lstrcmpW(zhhkW, buffer), "%s: got wrong locale name %s\n",
            wine_dbgstr_w(zhhantW), wine_dbgstr_w(buffer));
 
         /* zh-Hans */
         lcid = pLocaleNameToLCID(zhHansW, 0);
-        todo_wine ok(lcid == MAKELCID(MAKELANGID(LANG_CHINESE_SIMPLIFIED, SUBLANG_CHINESE_SIMPLIFIED), SORT_DEFAULT),
+        ok(lcid == MAKELCID(MAKELANGID(LANG_CHINESE_SIMPLIFIED, SUBLANG_CHINESE_SIMPLIFIED), SORT_DEFAULT),
            "%s: got wrong lcid 0x%04x\n", wine_dbgstr_w(zhHansW), lcid);
         ret = pLCIDToLocaleName(lcid, buffer, sizeof(buffer)/sizeof(WCHAR), 0);
         ok(ret > 0, "%s: got %d\n", wine_dbgstr_w(zhHansW), ret);
-        todo_wine ok(!lstrcmpW(zhcnW, buffer), "%s: got wrong locale name %s\n",
+        ok(!lstrcmpW(zhcnW, buffer), "%s: got wrong locale name %s\n",
            wine_dbgstr_w(zhHansW), wine_dbgstr_w(buffer));
 
         /* zh-hans */
         lcid = pLocaleNameToLCID(zhhansW, 0);
-        todo_wine ok(lcid == MAKELCID(MAKELANGID(LANG_CHINESE_SIMPLIFIED, SUBLANG_CHINESE_SIMPLIFIED), SORT_DEFAULT),
+        ok(lcid == MAKELCID(MAKELANGID(LANG_CHINESE_SIMPLIFIED, SUBLANG_CHINESE_SIMPLIFIED), SORT_DEFAULT),
            "%s: got wrong lcid 0x%04x\n", wine_dbgstr_w(zhhansW),
            MAKELCID(MAKELANGID(LANG_CHINESE_SIMPLIFIED, SUBLANG_CHINESE_SIMPLIFIED), SORT_DEFAULT));
         ret = pLCIDToLocaleName(lcid, buffer, sizeof(buffer)/sizeof(WCHAR), 0);
         ok(ret > 0, "%s: got %d\n", wine_dbgstr_w(zhhansW), ret);
-        todo_wine ok(!lstrcmpW(zhcnW, buffer), "%s: got wrong locale name %s\n",
+        ok(!lstrcmpW(zhcnW, buffer), "%s: got wrong locale name %s\n",
            wine_dbgstr_w(zhhansW), wine_dbgstr_w(buffer));
     }
 }
@@ -4516,6 +4516,8 @@ static void test_IsValidLocaleName(void)
     static const WCHAR zzW[] = {'z','z',0};
     static const WCHAR zz_zzW[] = {'z','z','-','Z','Z',0};
     static const WCHAR zzzzW[] = {'z','z','z','z',0};
+    static const WCHAR zhHansW[] = {'z','h','-','H','a','n','s',0};
+    static const WCHAR zhHantW[] = {'z','h','-','H','a','n','t',0};
     BOOL ret;
 
     if (!pIsValidLocaleName)
@@ -4526,6 +4528,10 @@ static void test_IsValidLocaleName(void)
 
     ret = pIsValidLocaleName(enusW);
     ok(ret, "IsValidLocaleName failed\n");
+    ret = pIsValidLocaleName(zhHantW);
+    ok(ret, "IsValidLocaleName failed\n");
+    ret = pIsValidLocaleName(zhHansW);
+    ok(ret, "IsValidLocaleName failed\n");
     ret = pIsValidLocaleName(zzW);
     ok(!ret || broken(ret), "IsValidLocaleName should have failed\n");
     ret = pIsValidLocaleName(zz_zzW);
-- 
2.11.0



More information about the wine-patches mailing list