From: Bruno Haible Date: Mon, 8 Jan 2024 05:51:40 +0000 (+0100) Subject: intl: Fix the Windows MUI code, so that it works on Windows 10. X-Git-Tag: v0.23~281 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9e5704fa209898e28f6b059c8fc2ed9cd6ec2abb;p=thirdparty%2Fgettext.git intl: Fix the Windows MUI code, so that it works on Windows 10. Reported by at . * gettext-runtime/intl/langprefs.c (_nl_language_preferences_win32_mui): Make GetUserPreferredUILanguages prototype with Microsoft's current documentation. Allow the first GetUserPreferredUILanguages call to succeed. --- diff --git a/gettext-runtime/intl/langprefs.c b/gettext-runtime/intl/langprefs.c index 9f5066ea6..e69cc983b 100644 --- a/gettext-runtime/intl/langprefs.c +++ b/gettext-runtime/intl/langprefs.c @@ -1,5 +1,5 @@ /* Determine the user's language preferences. - Copyright (C) 2004-2007, 2018-2023 Free Software Foundation, Inc. + Copyright (C) 2004-2007, 2018-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -63,11 +63,11 @@ extern const char *gl_locale_name_from_win32_LCID (LCID lcid); static const char * _nl_language_preferences_win32_mui (HMODULE kernel32) { - /* DWORD GetUserPreferredUILanguages (ULONG dwFlags, - PULONG pulNumLanguages, - PWSTR pwszLanguagesBuffer, - PULONG pcchLanguagesBuffer); */ - typedef DWORD (WINAPI *GetUserPreferredUILanguages_func) (ULONG, PULONG, PWSTR, PULONG); + /* BOOL GetUserPreferredUILanguages (DWORD dwFlags, + PULONG pulNumLanguages, + PWSTR pwszLanguagesBuffer, + PULONG pcchLanguagesBuffer); */ + typedef BOOL (WINAPI *GetUserPreferredUILanguages_func) (DWORD, PULONG, PWSTR, PULONG); GetUserPreferredUILanguages_func p_GetUserPreferredUILanguages; p_GetUserPreferredUILanguages = @@ -77,14 +77,13 @@ _nl_language_preferences_win32_mui (HMODULE kernel32) { ULONG num_languages; ULONG bufsize; - DWORD ret; + BOOL ret; bufsize = 0; ret = p_GetUserPreferredUILanguages (MUI_LANGUAGE_NAME, &num_languages, NULL, &bufsize); - if (ret == 0 - && GetLastError () == STATUS_BUFFER_OVERFLOW + if ((ret || GetLastError () == STATUS_BUFFER_OVERFLOW) && bufsize > 0) { WCHAR *buffer = (WCHAR *) malloc (bufsize * sizeof (WCHAR));