Alexandre Julliard : kernel32: Don' t return a parent locale for neutral locales in GetLocaleInfoEx.
Alexandre Julliard
julliard at winehq.org
Tue Nov 28 15:11:05 CST 2017
Module: wine
Branch: master
Commit: c63a08586f19af7e6a65a064696743f648006fcd
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c63a08586f19af7e6a65a064696743f648006fcd
Author: Alexandre Julliard <julliard at winehq.org>
Date: Tue Nov 28 19:36:16 2017 +0100
kernel32: Don't return a parent locale for neutral locales in GetLocaleInfoEx.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/kernel32/locale.c | 20 +++++++++++++-------
dlls/kernel32/tests/locale.c | 8 ++++++++
2 files changed, 21 insertions(+), 7 deletions(-)
diff --git a/dlls/kernel32/locale.c b/dlls/kernel32/locale.c
index 53bd8a4..e4c323e 100644
--- a/dlls/kernel32/locale.c
+++ b/dlls/kernel32/locale.c
@@ -1807,16 +1807,22 @@ INT WINAPI GetLocaleInfoEx(LPCWSTR locale, LCTYPE info, LPWSTR buffer, INT len)
if (!lcid) return 0;
/* special handling for neutral locale names */
- if (info == LOCALE_SNAME && locale && strlenW(locale) == 2)
+ if (locale && strlenW(locale) == 2)
{
- if (len && len < 3)
+ switch (info)
{
- SetLastError(ERROR_INSUFFICIENT_BUFFER);
- return 0;
+ case LOCALE_SNAME:
+ if (len && len < 3)
+ {
+ SetLastError(ERROR_INSUFFICIENT_BUFFER);
+ return 0;
+ }
+ if (len) strcpyW(buffer, locale);
+ return 3;
+ case LOCALE_SPARENT:
+ if (len) buffer[0] = 0;
+ return 1;
}
-
- if (len) strcpyW(buffer, locale);
- return 3;
}
return GetLocaleInfoW(lcid, info, buffer, len);
diff --git a/dlls/kernel32/tests/locale.c b/dlls/kernel32/tests/locale.c
index 97ed6fa..2af4946 100644
--- a/dlls/kernel32/tests/locale.c
+++ b/dlls/kernel32/tests/locale.c
@@ -4483,6 +4483,14 @@ static void test_GetLocaleInfoEx(void)
ok(ret == lstrlenW(bufferW)+1, "got %d\n", ret);
ok(!lstrcmpW(bufferW, enuW), "got %s\n", wine_dbgstr_w(bufferW));
+ ret = pGetLocaleInfoEx(enusW, LOCALE_SPARENT, bufferW, sizeof(bufferW)/sizeof(WCHAR));
+ ok(ret == lstrlenW(bufferW)+1, "got %d\n", ret);
+ ok(!lstrcmpW(bufferW, enW), "got %s\n", wine_dbgstr_w(bufferW));
+
+ ret = pGetLocaleInfoEx(enW, LOCALE_SPARENT, bufferW, sizeof(bufferW)/sizeof(WCHAR));
+ ok(ret == 1, "got %d\n", ret);
+ ok(!bufferW[0], "got %s\n", wine_dbgstr_w(bufferW));
+
ret = pGetLocaleInfoEx(enW, LOCALE_SCOUNTRY, bufferW, sizeof(bufferW)/sizeof(WCHAR));
ok(ret == lstrlenW(bufferW)+1, "got %d\n", ret);
if ((PRIMARYLANGID(LANGIDFROMLCID(GetSystemDefaultLCID())) != LANG_ENGLISH) ||
More information about the wine-cvs
mailing list