Module: wine Branch: master Commit: c63a08586f19af7e6a65a064696743f648006fcd URL: http://source.winehq.org/git/wine.git/?a=commit;h=c63a08586f19af7e6a65a06469...
Author: Alexandre Julliard julliard@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@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) ||