From: Jacek Caban Subject: kernel32: Fixed handling LOCALE_NAME_USER_DEFAULT in GetLocaleInfoEx. Message-Id: <50504734-43ad-bb3a-e0fd-f9de6a2c76e8@codeweavers.com> Date: Fri, 26 Aug 2016 22:13:17 +0200 Signed-off-by: Jacek Caban --- dlls/kernel32/locale.c | 2 +- dlls/kernel32/tests/locale.c | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/dlls/kernel32/locale.c b/dlls/kernel32/locale.c index 52c1db4..77bab0c 100644 --- a/dlls/kernel32/locale.c +++ b/dlls/kernel32/locale.c @@ -1726,7 +1726,7 @@ 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 && strlenW(locale) == 2) + if (info == LOCALE_SNAME && locale && strlenW(locale) == 2) { if (len && len < 3) { diff --git a/dlls/kernel32/tests/locale.c b/dlls/kernel32/tests/locale.c index 7cb7859..701f8d7 100644 --- a/dlls/kernel32/tests/locale.c +++ b/dlls/kernel32/tests/locale.c @@ -4283,7 +4283,7 @@ static void test_IdnToUnicode(void) static void test_GetLocaleInfoEx(void) { static const WCHAR enW[] = {'e','n',0}; - WCHAR bufferW[80]; + WCHAR bufferW[80], buffer2[80]; INT ret; if (!pGetLocaleInfoEx) @@ -4354,6 +4354,12 @@ static void test_GetLocaleInfoEx(void) ok(!lstrcmpW(bufferW, ptr->name), "%s: got wrong LOCALE_SNAME %s\n", wine_dbgstr_w(ptr->name), wine_dbgstr_w(bufferW)); ptr++; } + + ret = pGetLocaleInfoEx(LOCALE_NAME_USER_DEFAULT, LOCALE_SNAME, bufferW, sizeof(bufferW)/sizeof(WCHAR)); + ok(ret && ret == lstrlenW(bufferW)+1, "got ret value %d\n", ret); + ret = GetLocaleInfoW(GetUserDefaultLCID(), LOCALE_SNAME, buffer2, sizeof(buffer2)/sizeof(WCHAR)); + ok(ret && ret == lstrlenW(buffer2)+1, "got ret value %d\n", ret); + ok(!lstrcmpW(bufferW, buffer2), "LOCALE_SNAMEs don't match %s %s\n", wine_dbgstr_w(bufferW), wine_dbgstr_w(buffer2)); } }