Skip to content

Commit 470eed2

Browse files
author
skulltrail
committed
Fix ntext, by accidentally removing the RtlLcidToLocaleName function, which broke chromium and related in wow64 and perhaps other environments
1 parent 8d0c52a commit 470eed2

File tree

2 files changed

+19
-29
lines changed

2 files changed

+19
-29
lines changed

wrappers/base/ntext_wrapper/ntext.spec

+1-1
Original file line numberDiff line numberDiff line change
@@ -1573,7 +1573,7 @@
15731573
@ stdcall RtlpIsValidUILanguage(ptr)
15741574
@ stdcall RtlIsNormalizedString(long wstr long ptr)
15751575
@ stdcall RtlLCIDToCultureName(long wstr) ;this functions already have implementation
1576-
@ stdcall RtlL(long ptr long long)
1576+
@ stdcall RtlLcidToLocaleName(long ptr long long)
15771577
@ stdcall RtlNormalizeString(long wstr long ptr ptr)
15781578
@ stdcall RtlProcessFlsData(ptr)
15791579
@ stdcall RtlpQueryDefaultUILanguage(long long)

wrappers/base/ntext_wrapper/rtl/locale.c

+18-28
Original file line numberDiff line numberDiff line change
@@ -717,11 +717,11 @@ static NTSTATUS open_nls_data_file( ULONG type, ULONG id, HANDLE *file )
717717
}
718718

719719
/***********************************************************************
720-
* L (KERNEL32.@)
720+
* LCIDToLocaleName (KERNEL32.@)
721721
*/
722722
INT
723723
WINAPI
724-
RtlpL(
724+
RtlpLCIDToLocaleName(
725725
LCID lcid,
726726
LPWSTR lpName,
727727
INT count,
@@ -745,7 +745,7 @@ RtlpL(
745745

746746
NTSTATUS
747747
NTAPI
748-
RtlL(
748+
RtlLcidToLocaleName(
749749
_In_ LCID lcid,
750750
_Inout_ PUNICODE_STRING locale,
751751
_In_ ULONG Flags,
@@ -754,7 +754,7 @@ RtlL(
754754
{
755755
LPWSTR lpName = L"";
756756

757-
if(RtlpL(lcid, lpName, 0, 0)>0){
757+
if(RtlpLCIDToLocaleName(lcid, lpName, 0, 0)>0){
758758
RtlInitUnicodeString(locale, lpName);
759759
return STATUS_SUCCESS;
760760
}else{
@@ -773,7 +773,7 @@ RtlLCIDToCultureName(
773773
OUT PUNICODE_STRING lpName
774774
)
775775
{
776-
return RtlL(lcid, lpName, 0, TRUE);
776+
return RtlLcidToLocaleName(lcid, lpName, 0, TRUE);
777777
}
778778

779779
/*
@@ -845,21 +845,11 @@ static NTSTATUS get_dummy_preferred_ui_language( DWORD flags, LANGID lang, ULONG
845845
NTSTATUS status;
846846
ULONG len;
847847

848-
//FIXME("(0x%lx %#x %p %p %p) returning a dummy value (current locale)\n", flags, lang, count, buffer, size);
848+
DbgPrint("(0x%x %p %p %p) returning a dummy value (current locale)\n", flags, count, buffer, size);
849849

850-
if (flags & MUI_LANGUAGE_ID) swprintf( name, L"%04lX", lang );
851-
else
852-
{
853-
UNICODE_STRING str;
854-
855-
if (lang == LOCALE_CUSTOM_UNSPECIFIED)
856-
NtQueryInstallUILanguage( &lang );
857-
858-
str.Buffer = name;
859-
str.MaximumLength = sizeof(name);
860-
status = RtlL( lang, &str, 0, FALSE );
861-
if (status) return status;
862-
}
850+
status = load_string( (flags & MUI_LANGUAGE_ID) ? LOCALE_ILANGUAGE : LOCALE_SNAME,
851+
lang, name, ARRAY_SIZE(name) );
852+
if (status) return status;
863853

864854
len = wcslen( name ) + 2;
865855
name[len - 1] = 0;
@@ -874,8 +864,9 @@ static NTSTATUS get_dummy_preferred_ui_language( DWORD flags, LANGID lang, ULONG
874864
}
875865
*size = len;
876866
*count = 1;
877-
//TRACE("returned variable content: %ld, \"%s\", %ld\n", *count, debugstr_w(buffer), *size);
867+
DbgPrint("returned variable content: %d, \"%s\", %d\n", *count, buffer, *size);
878868
return STATUS_SUCCESS;
869+
879870
}
880871

881872
// NTSTATUS
@@ -907,7 +898,7 @@ static NTSTATUS get_dummy_preferred_ui_language( DWORD flags, LANGID lang, ULONG
907898
// wcscpy(pwszLanguagesBuffer, locale);
908899
// memcpy(pwszLanguagesBuffer+wcslen(pwszLanguagesBuffer), L"\0409\0\0", sizeof(WCHAR)*(5));
909900
// }else{
910-
// RtlpL(UILangId, locale, LOCALE_NAME_MAX_LENGTH, 0);
901+
// RtlpLCIDToLocaleName(UILangId, locale, LOCALE_NAME_MAX_LENGTH, 0);
911902
// wcscpy(pwszLanguagesBuffer, locale);
912903
// memcpy(pwszLanguagesBuffer+wcslen(pwszLanguagesBuffer), L"\0en-US\0\0", sizeof(WCHAR)*(7));
913904
// }
@@ -917,7 +908,7 @@ static NTSTATUS get_dummy_preferred_ui_language( DWORD flags, LANGID lang, ULONG
917908
// if(dwFlags == MUI_LANGUAGE_ID){
918909
// length = 9;
919910
// }else{
920-
// length = (7 + RtlpL(UILangId, NULL, 0, 0));
911+
// length = (7 + RtlpLCIDToLocaleName(UILangId, NULL, 0, 0));
921912
// }
922913
// *pcchLanguagesBuffer = length;
923914
// return STATUS_INVALID_PARAMETER;
@@ -967,7 +958,7 @@ RtlGetUserPreferredUILanguages(
967958
// wcscpy(pwszLanguagesBuffer, locale);
968959
// memcpy(pwszLanguagesBuffer+wcslen(pwszLanguagesBuffer), L"\0409\0\0", sizeof(WCHAR)*(5));
969960
// }else{
970-
// RtlpL(lcid, locale, LOCALE_NAME_MAX_LENGTH, 0);
961+
// RtlpLCIDToLocaleName(lcid, locale, LOCALE_NAME_MAX_LENGTH, 0);
971962
// wcscpy(pwszLanguagesBuffer, locale);
972963
// memcpy(pwszLanguagesBuffer+wcslen(pwszLanguagesBuffer), L"\0en-US\0\0", sizeof(WCHAR)*(7));
973964
// }
@@ -977,7 +968,7 @@ RtlGetUserPreferredUILanguages(
977968
// if(dwFlags == MUI_LANGUAGE_ID){
978969
// length = 9;
979970
// }else{
980-
// length = (7 + RtlpL(lcid, NULL, 0, 0));
971+
// length = (7 + RtlpLCIDToLocaleName(lcid, NULL, 0, 0));
981972
// }
982973
// *pcchLanguagesBuffer = length;
983974
// return STATUS_INVALID_PARAMETER;
@@ -1027,7 +1018,7 @@ NTSTATUS WINAPI RtlGetSystemPreferredUILanguages( DWORD flags, ULONG unknown, UL
10271018
// wcscpy(pwszLanguagesBuffer, locale);
10281019
// memcpy(pwszLanguagesBuffer+wcslen(pwszLanguagesBuffer), L"\0409\0\0", sizeof(WCHAR)*(5));
10291020
// }else{
1030-
// RtlpL(lcid, locale, LOCALE_NAME_MAX_LENGTH, 0);
1021+
// RtlpLCIDToLocaleName(lcid, locale, LOCALE_NAME_MAX_LENGTH, 0);
10311022
// wcscpy(pwszLanguagesBuffer, locale);
10321023
// memcpy(pwszLanguagesBuffer+wcslen(pwszLanguagesBuffer), L"\0en-US\0\0", sizeof(WCHAR)*(7));
10331024
// }
@@ -1037,22 +1028,21 @@ NTSTATUS WINAPI RtlGetSystemPreferredUILanguages( DWORD flags, ULONG unknown, UL
10371028
// if(dwFlags == MUI_LANGUAGE_ID){
10381029
// length = 9;
10391030
// }else{
1040-
// length = (7 + RtlpL(lcid, NULL, 0, 0));
1031+
// length = (7 + RtlpLCIDToLocaleName(lcid, NULL, 0, 0));
10411032
// }
10421033
// *pcchLanguagesBuffer = length;
10431034
// return STATUS_INVALID_PARAMETER;
10441035
// }
10451036
// }
10461037

1047-
10481038
/**************************************************************************
10491039
* RtlGetThreadPreferredUILanguages (NTDLL.@)
10501040
*/
10511041
NTSTATUS WINAPI RtlGetThreadPreferredUILanguages( DWORD flags, ULONG *count, WCHAR *buffer, ULONG *size )
10521042
{
10531043
LANGID ui_language;
10541044

1055-
DbgPrint( "%08lx, %p, %p %p\n", flags, count, buffer, size );
1045+
DbgPrint( "%08x, %p, %p %p\n", flags, count, buffer, size );
10561046

10571047
NtQueryDefaultUILanguage( &ui_language );
10581048
return get_dummy_preferred_ui_language( flags, ui_language, count, buffer, size );

0 commit comments

Comments
 (0)