From: Piotr Caban piotr@codeweavers.com
--- dlls/kernelbase/locale.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/dlls/kernelbase/locale.c b/dlls/kernelbase/locale.c index 9487e65a8c0..00e52dc7129 100644 --- a/dlls/kernelbase/locale.c +++ b/dlls/kernelbase/locale.c @@ -725,6 +725,9 @@ const NLS_LOCALE_DATA * WINAPI NlsValidateLocale( LCID *lcid, ULONG flags ) const NLS_LOCALE_LCNAME_INDEX *name_entry; const NLS_LOCALE_LCID_INDEX *entry; const NLS_LOCALE_DATA *locale; + WCHAR buf[LOCALE_NAME_MAX_LENGTH + 1]; + UNICODE_STRING str; + NTSTATUS status;
switch (*lcid) { @@ -735,9 +738,19 @@ const NLS_LOCALE_DATA * WINAPI NlsValidateLocale( LCID *lcid, ULONG flags ) case LOCALE_USER_DEFAULT: case LOCALE_CUSTOM_DEFAULT: case LOCALE_CUSTOM_UNSPECIFIED: - case LOCALE_CUSTOM_UI_DEFAULT: *lcid = user_lcid; return user_locale; + case LOCALE_CUSTOM_UI_DEFAULT: + str.Buffer = buf; + str.MaximumLength = sizeof(buf); + status = RtlLcidToLocaleName( *lcid, &str, 0, FALSE ); + if (!status) status = RtlLocaleNameToLcid( buf, lcid, 0 ); + if (status) + { + SetLastError( RtlNtStatusToDosError( status )); + return NULL; + } + /* fall through */ default: if (!(entry = find_lcid_entry( *lcid ))) return NULL; locale = get_locale_data( entry->idx );