[prev in list] [next in list] [prev in thread] [next in thread]
List: wine-devel
Subject: [PATCH] msvcrt: Try SNAME when matching locale.
From: Daniel Lehman <dlehman () esri ! com>
Date: 2018-04-30 20:53:33
Message-ID: ce1ab4c0567441059d911609e4f80017 () RED-INF-MXMB-P4 ! esri ! com
[Download RAW message or body]
["0001-msvcrt-Try-SNAME-when-matching-locale.txt" (text/plain)]
From 8a3b0be453a4ff0ca2e71eb0e8a48d1ce4919525 Mon Sep 17 00:00:00 2001
From: Daniel Lehman <dlehman@esri.com>
Date: Wed, 18 Apr 2018 10:58:10 -0700
Subject: [PATCH] msvcrt: Try SNAME when matching locale.
Signed-off-by: Daniel Lehman <dlehman@esri.com>
---
dlls/msvcrt/locale.c | 49 ++++++++++++++++++++++++--------------
dlls/msvcrt/tests/locale.c | 29 ++++++++++++++++++++++
2 files changed, 60 insertions(+), 18 deletions(-)
diff --git a/dlls/msvcrt/locale.c b/dlls/msvcrt/locale.c
index 6314840489f..2e37a1a1640 100644
--- a/dlls/msvcrt/locale.c
+++ b/dlls/msvcrt/locale.c
@@ -154,30 +154,43 @@ find_best_locale_proc(HMODULE hModule, LPCSTR type, LPCSTR name, WORD LangID, LO
if(PRIMARYLANGID(LangID) == LANG_NEUTRAL)
return CONTINUE_LOOKING;
- /* Check Language */
- if (compare_info(lcid,LOCALE_SISO639LANGNAME,buff,res->search_language, TRUE) ||
- compare_info(lcid,LOCALE_SABBREVLANGNAME,buff,res->search_language, TRUE) ||
- compare_info(lcid,LOCALE_SENGLANGUAGE,buff,res->search_language, FALSE))
+ /* Check <language>-<region> */
+ if (compare_info(lcid,LOCALE_SNAME,buff,res->search_language, TRUE))
{
- TRACE(":Found language: %s->%s\n", res->search_language, buff);
- flags |= FOUND_LANGUAGE;
+ TRACE(":Found locale: %s->%s\n", res->search_language, buff);
+ flags |= FOUND_LANGUAGE | FOUND_COUNTRY;
}
- else if (res->match_flags & FOUND_LANGUAGE)
+ else if ((res->match_flags & (FOUND_LANGUAGE | FOUND_COUNTRY)) == (FOUND_LANGUAGE | FOUND_COUNTRY))
{
return CONTINUE_LOOKING;
}
-
- /* Check Country */
- if (compare_info(lcid,LOCALE_SISO3166CTRYNAME,buff,res->search_country, TRUE) ||
- compare_info(lcid,LOCALE_SABBREVCTRYNAME,buff,res->search_country, TRUE) ||
- compare_info(lcid,LOCALE_SENGCOUNTRY,buff,res->search_country, FALSE))
- {
- TRACE("Found country:%s->%s\n", res->search_country, buff);
- flags |= FOUND_COUNTRY;
- }
- else if (!flags && (res->match_flags & FOUND_COUNTRY))
+ else
{
- return CONTINUE_LOOKING;
+ /* Check Language */
+ if (compare_info(lcid,LOCALE_SISO639LANGNAME,buff,res->search_language, TRUE) ||
+ compare_info(lcid,LOCALE_SABBREVLANGNAME,buff,res->search_language, TRUE) ||
+ compare_info(lcid,LOCALE_SENGLANGUAGE,buff,res->search_language, FALSE))
+ {
+ TRACE(":Found language: %s->%s\n", res->search_language, buff);
+ flags |= FOUND_LANGUAGE;
+ }
+ else if (res->match_flags & FOUND_LANGUAGE)
+ {
+ return CONTINUE_LOOKING;
+ }
+
+ /* Check Country */
+ if (compare_info(lcid,LOCALE_SISO3166CTRYNAME,buff,res->search_country, TRUE) ||
+ compare_info(lcid,LOCALE_SABBREVCTRYNAME,buff,res->search_country, TRUE) ||
+ compare_info(lcid,LOCALE_SENGCOUNTRY,buff,res->search_country, FALSE))
+ {
+ TRACE("Found country:%s->%s\n", res->search_country, buff);
+ flags |= FOUND_COUNTRY;
+ }
+ else if (!flags && (res->match_flags & FOUND_COUNTRY))
+ {
+ return CONTINUE_LOOKING;
+ }
}
/* Check codepage */
diff --git a/dlls/msvcrt/tests/locale.c b/dlls/msvcrt/tests/locale.c
index 5e6d172b8f2..697125971ce 100644
--- a/dlls/msvcrt/tests/locale.c
+++ b/dlls/msvcrt/tests/locale.c
@@ -614,6 +614,35 @@ static void test_setlocale(void)
ret = setlocale(LC_ALL, "English_United States.UTF8");
ok(ret == NULL, "ret != NULL\n");
+
+ ret = setlocale(LC_ALL, "en-US");
+ ok(ret != NULL || broken (ret == NULL), "ret == NULL\n");
+ if(ret)
+ ok(!strcmp(ret, "English_United States.1252"), "ret = %s\n", ret);
+
+ ret = setlocale(LC_ALL, "en-us");
+ ok(ret != NULL || broken (ret == NULL), "ret == NULL\n");
+ if(ret)
+ ok(!strcmp(ret, "English_United States.1252"), "ret = %s\n", ret);
+
+ ret = setlocale(LC_ALL, "en-GB");
+ ok(ret != NULL || broken (ret == NULL), "ret == NULL\n");
+ if(ret)
+ ok(!strcmp(ret, "English_United Kingdom.1252")
+ || broken(!strcmp(ret, "English_United States.1252")) /* XP & 2003 */,
+ "ret = %s\n", ret);
+
+ ret = setlocale(LC_ALL, "uz-UZ");
+ ok(ret != NULL || broken (ret == NULL), "ret == NULL\n");
+ if(ret)
+ ok(!strcmp(ret, "Uzbek (Cyrillic)_Uzbekistan.1251")
+ || broken(!strcmp(ret, "Uzbek (Latin)_Uzbekistan.1254")) /* XP & 2003 */,
+ "ret = %s\n", ret);
+
+ ret = setlocale(LC_ALL, "uz-Latn-UZ");
+ ok(ret != NULL || broken (ret == NULL), "ret == NULL\n");
+ if(ret)
+ ok(!strcmp(ret, "Uzbek (Latin)_Uzbekistan.1254"), "ret = %s\n", ret);
}
static void test_crtGetStringTypeW(void)
--
2.17.0
[Attachment #4 (text/plain)]
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic