From a8987adb6781da7da58629f92eb331ad4dea1317 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 8 May 2025 16:37:34 +0300 Subject: [PATCH] [KERNEL32_VISTA] Move GetLocaleInfoEx from locale.c into a separate file This allows to have it in kernel32_vista --- .../kernel32/kernel32_vista/CMakeLists.txt | 1 + .../kernel32/kernel32_vista/GetLocaleInfoEx.c | 48 +++++++++++++++++++ .../kernel32_vista/kernel32_vista.spec | 1 + dll/win32/kernel32/winnls/string/locale.c | 2 + 4 files changed, 52 insertions(+) create mode 100644 dll/win32/kernel32/kernel32_vista/GetLocaleInfoEx.c diff --git a/dll/win32/kernel32/kernel32_vista/CMakeLists.txt b/dll/win32/kernel32/kernel32_vista/CMakeLists.txt index e6229a5b66c..e1d274e32b9 100644 --- a/dll/win32/kernel32/kernel32_vista/CMakeLists.txt +++ b/dll/win32/kernel32/kernel32_vista/CMakeLists.txt @@ -9,6 +9,7 @@ spec2def(kernel32_vista.dll kernel32_vista.spec ADD_IMPORTLIB) list(APPEND SOURCE firmware.c EnumSystemLocalesEx.c + GetLocaleInfoEx.c GetFileInformationByHandleEx.c GetTickCount64.c GetUserDefaultLocaleName.c diff --git a/dll/win32/kernel32/kernel32_vista/GetLocaleInfoEx.c b/dll/win32/kernel32/kernel32_vista/GetLocaleInfoEx.c new file mode 100644 index 00000000000..1c37fcf7992 --- /dev/null +++ b/dll/win32/kernel32/kernel32_vista/GetLocaleInfoEx.c @@ -0,0 +1,48 @@ +/* + * PROJECT: ReactOS Win32 Base API + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: Implementation of GetLocaleInfoEx (taken from wine-locale.c) + * COPYRIGHT: Copyright 1995 Martin von Loewis + * Copyright 1998 David Lee Lambert + * Copyright 2000 Julio César Gázquez + * Copyright 2002 Alexandre Julliard for CodeWeavers + */ + +#include "k32_vista.h" +#include + +#define NDEBUG +#include + +/****************************************************************************** + * GetLocaleInfoEx (KERNEL32.@) + */ +INT WINAPI GetLocaleInfoEx(LPCWSTR locale, LCTYPE info, LPWSTR buffer, INT len) +{ + LCID lcid = LocaleNameToLCID(locale, 0); + + DPRINT("%s, lcid=0x%x, 0x%x\n", debugstr_w(locale), lcid, info); + + if (!lcid) return 0; + + /* special handling for neutral locale names */ + if (locale && strlenW(locale) == 2) + { + switch (info) + { + 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; + } + } + + return GetLocaleInfoW(lcid, info, buffer, len); +} diff --git a/dll/win32/kernel32/kernel32_vista/kernel32_vista.spec b/dll/win32/kernel32/kernel32_vista/kernel32_vista.spec index d86ff4c7096..7a51780ea88 100644 --- a/dll/win32/kernel32/kernel32_vista/kernel32_vista.spec +++ b/dll/win32/kernel32/kernel32_vista/kernel32_vista.spec @@ -39,6 +39,7 @@ @ stdcall GetFileMUIPath(long wstr wstr ptr wstr ptr ptr) @ stdcall GetFinalPathNameByHandleA(ptr str long long) @ stdcall GetFinalPathNameByHandleW(ptr wstr long long) +@ stdcall GetLocaleInfoEx(wstr long ptr long) @ stdcall GetSystemPreferredUILanguages(long ptr wstr ptr) @ stdcall GetThreadPreferredUILanguages(long ptr wstr ptr) @ stdcall GetThreadUILanguage() diff --git a/dll/win32/kernel32/winnls/string/locale.c b/dll/win32/kernel32/winnls/string/locale.c index c8862e2a447..71ab36b9b24 100644 --- a/dll/win32/kernel32/winnls/string/locale.c +++ b/dll/win32/kernel32/winnls/string/locale.c @@ -1816,6 +1816,7 @@ INT WINAPI GetLocaleInfoW( LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len ) } #if (WINVER >= 0x0600) +#if 0 // See kernel32_vista /****************************************************************************** * GetLocaleInfoEx (KERNEL32.@) */ @@ -1848,6 +1849,7 @@ INT WINAPI GetLocaleInfoEx(LPCWSTR locale, LCTYPE info, LPWSTR buffer, INT len) return GetLocaleInfoW(lcid, info, buffer, len); } +#endif BOOL WINAPI