[KERNEL32_VISTA] Move EnumSystemLocalesEx from locale.c into a separate file

This allows to have it in kernel32_vista
This commit is contained in:
Timo Kreuzer
2025-05-08 14:27:45 +03:00
parent 48ec990a49
commit 5225c75d3b
4 changed files with 65 additions and 1 deletions

View File

@@ -8,6 +8,7 @@ spec2def(kernel32_vista.dll kernel32_vista.spec ADD_IMPORTLIB)
list(APPEND SOURCE
firmware.c
EnumSystemLocalesEx.c
GetFileInformationByHandleEx.c
GetTickCount64.c
GetUserDefaultLocaleName.c

View File

@@ -0,0 +1,61 @@
/*
* 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 <winuser.h>
struct enum_locale_ex_data
{
LOCALE_ENUMPROCEX proc;
DWORD flags;
LPARAM lparam;
};
static BOOL CALLBACK enum_locale_ex_proc( HMODULE module, LPCWSTR type,
LPCWSTR name, WORD lang, LONG_PTR lparam )
{
struct enum_locale_ex_data *data = (struct enum_locale_ex_data *)lparam;
WCHAR buffer[256];
DWORD neutral;
unsigned int flags;
GetLocaleInfoW( MAKELCID( lang, SORT_DEFAULT ), LOCALE_SNAME | LOCALE_NOUSEROVERRIDE,
buffer, sizeof(buffer) / sizeof(WCHAR) );
if (!GetLocaleInfoW( MAKELCID( lang, SORT_DEFAULT ),
LOCALE_INEUTRAL | LOCALE_NOUSEROVERRIDE | LOCALE_RETURN_NUMBER,
(LPWSTR)&neutral, sizeof(neutral) / sizeof(WCHAR) ))
neutral = 0;
flags = LOCALE_WINDOWS;
flags |= neutral ? LOCALE_NEUTRALDATA : LOCALE_SPECIFICDATA;
if (data->flags && !(data->flags & flags)) return TRUE;
return data->proc( buffer, flags, data->lparam );
}
/******************************************************************************
* EnumSystemLocalesEx (KERNEL32.@)
*/
BOOL WINAPI EnumSystemLocalesEx( LOCALE_ENUMPROCEX proc, DWORD flags, LPARAM lparam, LPVOID reserved )
{
struct enum_locale_ex_data data;
HMODULE kernel32_handle = GetModuleHandleW(L"kernel32.dll");
if (reserved)
{
SetLastError( ERROR_INVALID_PARAMETER );
return FALSE;
}
data.proc = proc;
data.flags = flags;
data.lparam = lparam;
EnumResourceLanguagesW( kernel32_handle, (LPCWSTR)RT_STRING,
(LPCWSTR)MAKEINTRESOURCE((LOCALE_SNAME >> 4) + 1),
enum_locale_ex_proc, (LONG_PTR)&data );
return TRUE;
}

View File

@@ -31,6 +31,7 @@
@ stdcall ApplicationRecoveryInProgress(ptr)
@ stdcall CreateSymbolicLinkA(str str long)
@ stdcall CreateSymbolicLinkW(wstr wstr long)
@ stdcall EnumSystemLocalesEx(ptr long long ptr)
@ stdcall GetApplicationRecoveryCallback(ptr ptr ptr ptr ptr)
@ stdcall GetApplicationRestart(ptr wstr ptr ptr)
@ stdcall GetFileBandwidthReservation(ptr ptr ptr ptr ptr ptr)

View File

@@ -3011,6 +3011,7 @@ struct enum_locale_ex_data
LPARAM lparam;
};
#if 0
static BOOL CALLBACK enum_locale_ex_proc( HMODULE module, LPCWSTR type,
LPCWSTR name, WORD lang, LONG_PTR lparam )
{
@@ -3051,7 +3052,7 @@ BOOL WINAPI EnumSystemLocalesEx( LOCALE_ENUMPROCEX proc, DWORD flags, LPARAM lpa
enum_locale_ex_proc, (LONG_PTR)&data );
return TRUE;
}
#endif
/***********************************************************************
* VerLanguageNameA (KERNEL32.@)