From: Marius Schiffer marius@mschiffer.de
Implement an undocumented API used by some programs to fetch the user's selected languages. Returns only english as the language.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56915 --- configure.ac | 1 + dlls/bcp47langs/Makefile.in | 4 ++++ dlls/bcp47langs/bcp47langs.spec | 2 +- dlls/bcp47langs/main.c | 13 +++++++++++ dlls/bcp47langs/tests/Makefile.in | 6 +++++ dlls/bcp47langs/tests/bcp47langs.c | 21 ++++++++++++++++++ include/Makefile.in | 1 + include/bcp47langs.h | 35 ++++++++++++++++++++++++++++++ 8 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 dlls/bcp47langs/main.c create mode 100644 dlls/bcp47langs/tests/Makefile.in create mode 100644 dlls/bcp47langs/tests/bcp47langs.c create mode 100644 include/bcp47langs.h
diff --git a/configure.ac b/configure.ac index 23d3f8fbc49..70b607c7427 100644 --- a/configure.ac +++ b/configure.ac @@ -2461,6 +2461,7 @@ WINE_CONFIG_MAKEFILE(dlls/avifil32/tests) WINE_CONFIG_MAKEFILE(dlls/avifile.dll16,enable_win16) WINE_CONFIG_MAKEFILE(dlls/avrt) WINE_CONFIG_MAKEFILE(dlls/bcp47langs) +WINE_CONFIG_MAKEFILE(dlls/bcp47langs/tests) WINE_CONFIG_MAKEFILE(dlls/bcrypt) WINE_CONFIG_MAKEFILE(dlls/bcrypt/tests) WINE_CONFIG_MAKEFILE(dlls/bcryptprimitives) diff --git a/dlls/bcp47langs/Makefile.in b/dlls/bcp47langs/Makefile.in index 5eb4caaf0e7..dfe10916951 100644 --- a/dlls/bcp47langs/Makefile.in +++ b/dlls/bcp47langs/Makefile.in @@ -1,2 +1,6 @@ MODULE = bcp47langs.dll IMPORTLIB = bcp47langs +IMPORTS = combase + +SOURCES = \ + main.c diff --git a/dlls/bcp47langs/bcp47langs.spec b/dlls/bcp47langs/bcp47langs.spec index a054c1486a9..969f77b56b8 100644 --- a/dlls/bcp47langs/bcp47langs.spec +++ b/dlls/bcp47langs/bcp47langs.spec @@ -48,7 +48,7 @@ @ stub GetUserDisplayLanguageOverride @ stub GetUserLanguageInputMethods @ stub GetUserLanguageInputMethodsForUser -@ stub GetUserLanguages +@ stdcall GetUserLanguages(long ptr) @ stub GetUserLanguagesForAllUsers @ stub GetUserLanguagesForUser @ stub GetUserLocaleFromLanguageProfileOptOut diff --git a/dlls/bcp47langs/main.c b/dlls/bcp47langs/main.c new file mode 100644 index 00000000000..73c5af72f4e --- /dev/null +++ b/dlls/bcp47langs/main.c @@ -0,0 +1,13 @@ +#include <hstring.h> +#include <winstring.h> + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(bcp47langs); + +DWORD WINAPI GetUserLanguages(char delimiter, HSTRING* user_languages) { + static const WCHAR *languages = L"en-us"; + FIXME("stub, only returning en-us\n"); + WindowsCreateString(languages, wcslen(languages), user_languages); + return 0; +} diff --git a/dlls/bcp47langs/tests/Makefile.in b/dlls/bcp47langs/tests/Makefile.in new file mode 100644 index 00000000000..498e1b34afe --- /dev/null +++ b/dlls/bcp47langs/tests/Makefile.in @@ -0,0 +1,6 @@ +TESTDLL = bcp47langs.dll +IMPORTS = bcp47langs msvcrt combase + +SOURCES = \ + bcp47langs.c + diff --git a/dlls/bcp47langs/tests/bcp47langs.c b/dlls/bcp47langs/tests/bcp47langs.c new file mode 100644 index 00000000000..40bc0fa0f1d --- /dev/null +++ b/dlls/bcp47langs/tests/bcp47langs.c @@ -0,0 +1,21 @@ +#include <wine/test.h> +#include <winbase.h> + +#include "winstring.h" +#include "msvcrt/locale.h" +#include "bcp47langs.h" + +static void test_get_user_languages() { + HSTRING result; + const WCHAR *user_languages; + + setlocale(LC_ALL, "enu"); + ok( GetUserLanguages(',', &result) == 0, "unknown return code\n" ); + user_languages = WindowsGetStringRawBuffer(result, NULL); + ok( !lstrcmpW(user_languages, L"en-us"), "Language is not set to english\n" ); +} + +START_TEST(paths) +{ + test_get_user_languages(); +} diff --git a/include/Makefile.in b/include/Makefile.in index bbf28cfc87e..09259692949 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -45,6 +45,7 @@ SOURCES = \ axextendenums.h \ basetsd.h \ basetyps.h \ + bcp47langs.h \ bcrypt.h \ bdaiface.idl \ bdaiface_enums.h \ diff --git a/include/bcp47langs.h b/include/bcp47langs.h new file mode 100644 index 00000000000..86867c4f73a --- /dev/null +++ b/include/bcp47langs.h @@ -0,0 +1,35 @@ +/* + * bcp47langs definitions + * + * Copyright 2024 Marius Schiffer + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + */ + +#ifndef _BCP47LANGS_ +#define _BCP47LANGS_ + +#ifdef __cplusplus +extern "C" { +#endif + +DWORD WINAPI GetUserLanguages(char delimiter, HSTRING* user_languages); + +#ifdef __cplusplus +} +#endif + +#endif /*_BCP47LANGS__*/