Stefan Leichter : kernel32: Return a dummy value in GetSystemPreferredUILanguages.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Feb 15 09:41:50 CST 2016


Module: wine
Branch: master
Commit: 9cd67d2a5e7a7ad441287e803c166523814e2bcb
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=9cd67d2a5e7a7ad441287e803c166523814e2bcb

Author: Stefan Leichter <Stefan.Leichter at camLine.com>
Date:   Wed Feb 10 22:46:38 2016 +0100

kernel32: Return a dummy value in GetSystemPreferredUILanguages.

Signed-off-by: Stefan Leichter <Stefan.Leichter at camLine.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernel32/locale.c       | 43 ++++++++++++++++++++++++++++++++++++++++---
 dlls/kernel32/tests/locale.c | 10 ----------
 2 files changed, 40 insertions(+), 13 deletions(-)

diff --git a/dlls/kernel32/locale.c b/dlls/kernel32/locale.c
index d7619db..b499aa5 100644
--- a/dlls/kernel32/locale.c
+++ b/dlls/kernel32/locale.c
@@ -1053,6 +1053,8 @@ INT WINAPI GetSystemDefaultLocaleName(LPWSTR localename, INT len)
  */
 BOOL WINAPI GetSystemPreferredUILanguages(DWORD flags, ULONG* count, WCHAR* buffer, ULONG* size)
 {
+    LCTYPE type;
+    int lsize;
     if (flags & ~(MUI_LANGUAGE_NAME | MUI_LANGUAGE_ID | MUI_MACHINE_LANGUAGE_SETTINGS))
     {
         SetLastError(ERROR_INVALID_PARAMETER);
@@ -1069,9 +1071,44 @@ BOOL WINAPI GetSystemPreferredUILanguages(DWORD flags, ULONG* count, WCHAR* buff
         return FALSE;
     }
 
-    FIXME("(0x%x %p %p %p) stub\n", flags, count, buffer, size);
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return FALSE;
+    FIXME("(0x%x %p %p %p) returning a dummy value (current locale)\n", flags, count, buffer, size);
+
+    if (flags & MUI_LANGUAGE_ID)
+		type = LOCALE_ILANGUAGE;
+	else
+		type = LOCALE_SNAME;
+
+    lsize = GetLocaleInfoW(LOCALE_SYSTEM_DEFAULT, type, NULL, 0);
+    if (!lsize)
+    {
+        /* keep last error from callee */
+        return FALSE;
+    }
+    lsize++;
+    if (!*size)
+    {
+        *size = lsize;
+        *count = 1;
+        return TRUE;
+    }
+
+    if (lsize > *size)
+    {
+        SetLastError(ERROR_INSUFFICIENT_BUFFER);
+        return FALSE;
+    }
+
+    if (!GetLocaleInfoW(LOCALE_SYSTEM_DEFAULT, type, buffer, *size))
+    {
+        /* keep last error from callee */
+        return FALSE;
+    }
+
+    buffer[lsize-1] = 0;
+    *size = lsize;
+    *count = 1;
+    TRACE("returned variable content: %d, \"%s\", %d\n", *count, debugstr_w(buffer), *size);
+    return TRUE;
 }
 
 /***********************************************************************
diff --git a/dlls/kernel32/tests/locale.c b/dlls/kernel32/tests/locale.c
index 6726fb9..d49e0d6 100644
--- a/dlls/kernel32/tests/locale.c
+++ b/dlls/kernel32/tests/locale.c
@@ -4623,10 +4623,8 @@ static void test_GetSystemPreferredUILanguages(void)
     size = 0;
     SetLastError(0xdeadbeef);
     ret = pGetSystemPreferredUILanguages(0, &count, NULL, &size);
-    todo_wine
     ok(ret, "Expected GetSystemPreferredUILanguages to succeed\n");
     ok(count, "Expected count > 0\n");
-    todo_wine
     ok(size % 6 == 1, "Expected size (%d) %% 6 == 1\n", size);
 
     count = 0xdeadbeef;
@@ -4657,20 +4655,16 @@ static void test_GetSystemPreferredUILanguages(void)
     size = 0;
     SetLastError(0xdeadbeef);
     ret = pGetSystemPreferredUILanguages(MUI_LANGUAGE_ID | MUI_MACHINE_LANGUAGE_SETTINGS, &count, NULL, &size);
-    todo_wine
     ok(ret, "Expected GetSystemPreferredUILanguages to succeed\n");
     ok(count, "Expected count > 0\n");
-    todo_wine
     ok(size % 5 == 1, "Expected size (%d) %% 5 == 1\n", size);
 
     count = 0xdeadbeef;
     size = 0;
     SetLastError(0xdeadbeef);
     ret = pGetSystemPreferredUILanguages(MUI_LANGUAGE_NAME | MUI_MACHINE_LANGUAGE_SETTINGS, &count, NULL, &size);
-    todo_wine
     ok(ret, "Expected GetSystemPreferredUILanguages to succeed\n");
     ok(count, "Expected count > 0\n");
-    todo_wine
     ok(size % 6 == 1, "Expected size (%d) %% 6 == 1\n", size);
 
     /* second parameter
@@ -4696,20 +4690,16 @@ static void test_GetSystemPreferredUILanguages(void)
     size_id = 0;
     SetLastError(0xdeadbeef);
     ret = pGetSystemPreferredUILanguages(MUI_LANGUAGE_ID, &count, NULL, &size_id);
-    todo_wine
     ok(ret, "Expected GetSystemPreferredUILanguages to succeed\n");
     ok(count, "Expected count > 0\n");
-    todo_wine
     ok(size_id  % 5 == 1, "Expected size (%d) %% 5 == 1\n", size_id);
 
     count = 0xdeadbeef;
     size_name = 0;
     SetLastError(0xdeadbeef);
     ret = pGetSystemPreferredUILanguages(MUI_LANGUAGE_NAME, &count, NULL, &size_name);
-    todo_wine
     ok(ret, "Expected GetSystemPreferredUILanguages to succeed\n");
     ok(count, "Expected count > 0\n");
-    todo_wine
     ok(size_name % 6 == 1, "Expected size (%d) %% 6 == 1\n", size_name);
 
     size_buffer = max(size_id, size_name);




More information about the wine-cvs mailing list