kernel32/locale:Fix some bugs about special Chinese test in parse_locale_name()
THuang
matrix95 at foxmail.com
Sun Apr 16 02:19:53 CDT 2017
-------------- next part --------------
>From ff871445757367798e6e3920ca5793d4392da091 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 | 15 +++++++++++++++
dlls/kernel32/tests/locale.c | 22 ++++++++++++++--------
2 files changed, 29 insertions(+), 8 deletions(-)
diff --git a/dlls/kernel32/locale.c b/dlls/kernel32/locale.c
index e14aedbe44..d0406d4658 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 = 1;
+ return ;
+ }
+ if(!strcmpiW(p,HansW)){
+ name->lcid = 0x0804;
+ name->matches = 1;
+ return ;
+ }
*p++ = 0;
name->country = p;
if (!(p = strpbrkW( p, winsepW ))) goto done;
@@ -2849,11 +2861,14 @@ BOOL WINAPI IsValidLocale( LCID lcid, DWORD flags )
BOOL WINAPI IsValidLocaleName( LPCWSTR locale )
{
struct locale_name locale_name;
+ static const WCHAR zhHansW[] = {'z','h','-','H','a','n','s',0};
+ static const WCHAR zhHantW[] = {'z','h','-','H','a','n','t',0};
if (!locale)
return FALSE;
/* string parsing */
+ if(!strcmpiW(locale,zhHansW) || !strcmpiW(locale,zhHantW)) return TRUE;
parse_locale_name( locale, &locale_name );
TRACE( "found lcid %x for %s, matches %d\n",
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