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