Module: wine Branch: master Commit: c0ff49061f0bfb200d18854309ad177c1f718b65 URL: https://source.winehq.org/git/wine.git/?a=commit;h=c0ff49061f0bfb200d1885430...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Nov 26 17:49:31 2019 +0100
ntdll Implement RtlInitNlsTables() and RtlResetRtlTranslations().
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntdll/locale.c | 29 +++++++++++++++++++++++++++++ dlls/ntdll/ntdll.spec | 4 ++-- dlls/ntdll/rtlstr.c | 5 ----- include/winternl.h | 2 ++ 4 files changed, 33 insertions(+), 7 deletions(-)
diff --git a/dlls/ntdll/locale.c b/dlls/ntdll/locale.c index 6da6f5ead3..c271cab732 100644 --- a/dlls/ntdll/locale.c +++ b/dlls/ntdll/locale.c @@ -71,9 +71,14 @@ enum nls_section_type NLS_SECTION_NORMALIZE = 12 };
+UINT NlsAnsiCodePage = 0; +BYTE NlsMbCodePageTag = 0; +BYTE NlsMbOemCodePageTag = 0; + LCID user_lcid = 0, system_lcid = 0;
static LANGID user_ui_language, system_ui_language; +static NLSTABLEINFO nls_info; static HMODULE kernel32_handle; static const union cptable *unix_table; /* NULL if UTF8 */
@@ -652,6 +657,30 @@ void WINAPI RtlInitCodePageTable( USHORT *ptr, CPTABLEINFO *info ) }
+/************************************************************************** + * RtlInitNlsTables (NTDLL.@) + */ +void WINAPI RtlInitNlsTables( USHORT *ansi, USHORT *oem, USHORT *casetable, NLSTABLEINFO *info ) +{ + RtlInitCodePageTable( ansi, &info->AnsiTableInfo ); + RtlInitCodePageTable( oem, &info->OemTableInfo ); + info->UpperCaseTable = casetable + 2; + info->LowerCaseTable = casetable + casetable[1] + 2; +} + + +/************************************************************************** + * RtlResetRtlTranslations (NTDLL.@) + */ +void WINAPI RtlResetRtlTranslations( const NLSTABLEINFO *info ) +{ + NlsAnsiCodePage = info->AnsiTableInfo.CodePage; + NlsMbCodePageTag = info->AnsiTableInfo.DBCSCodePage; + NlsMbOemCodePageTag = info->OemTableInfo.DBCSCodePage; + nls_info = *info; +} + + /****************************************************************** * RtlLocaleNameToLcid (NTDLL.@) */ diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index d713e80a16..899b044c74 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -731,7 +731,7 @@ @ stdcall RtlInitAnsiStringEx(ptr str) @ stdcall RtlInitCodePageTable(ptr ptr) # @ stub RtlInitMemoryStream -@ stub RtlInitNlsTables +@ stdcall RtlInitNlsTables(ptr ptr ptr ptr) # @ stub RtlInitOutOfProcessMemoryStream @ stdcall RtlInitString(ptr str) @ stdcall RtlInitUnicodeString(ptr wstr) @@ -901,7 +901,7 @@ @ stub RtlRemoteCall @ stdcall RtlRemoveVectoredContinueHandler(ptr) @ stdcall RtlRemoveVectoredExceptionHandler(ptr) -@ stub RtlResetRtlTranslations +@ stdcall RtlResetRtlTranslations(ptr) @ stdcall -arch=x86_64 RtlRestoreContext(ptr ptr) @ stdcall RtlRestoreLastWin32Error(long) RtlSetLastWin32Error @ stub RtlRevertMemoryStream diff --git a/dlls/ntdll/rtlstr.c b/dlls/ntdll/rtlstr.c index ee861ddea4..0eeb14ed65 100644 --- a/dlls/ntdll/rtlstr.c +++ b/dlls/ntdll/rtlstr.c @@ -40,10 +40,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(ntdll);
#define GUID_STRING_LENGTH 38
-UINT NlsAnsiCodePage = 0; -BYTE NlsMbCodePageTag = 0; -BYTE NlsMbOemCodePageTag = 0; - extern const union cptable cptable_20127; /* 7-bit ASCII */
static const union cptable *ansi_table = &cptable_20127; @@ -59,7 +55,6 @@ void CDECL __wine_init_codepages( const union cptable *ansi, const union cptable { ansi_table = ansi; oem_table = oem; - NlsAnsiCodePage = ansi->info.codepage; }
/************************************************************************** diff --git a/include/winternl.h b/include/winternl.h index a2fb7e94e3..1477932d10 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -2782,6 +2782,7 @@ NTSYSAPI void WINAPI RtlInitString(PSTRING,PCSZ); NTSYSAPI void WINAPI RtlInitAnsiString(PANSI_STRING,PCSZ); NTSYSAPI NTSTATUS WINAPI RtlInitAnsiStringEx(PANSI_STRING,PCSZ); NTSYSAPI void WINAPI RtlInitCodePageTable(USHORT*,CPTABLEINFO*); +NTSYSAPI void WINAPI RtlInitNlsTables(USHORT*,USHORT*,USHORT*,NLSTABLEINFO*); NTSYSAPI void WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR); NTSYSAPI NTSTATUS WINAPI RtlInitUnicodeStringEx(PUNICODE_STRING,PCWSTR); NTSYSAPI void WINAPI RtlInitializeBitMap(PRTL_BITMAP,PULONG,ULONG); @@ -2861,6 +2862,7 @@ NTSYSAPI void WINAPI RtlReleaseResource(LPRTL_RWLOCK); NTSYSAPI void WINAPI RtlReleaseSRWLockExclusive(RTL_SRWLOCK*); NTSYSAPI void WINAPI RtlReleaseSRWLockShared(RTL_SRWLOCK*); NTSYSAPI ULONG WINAPI RtlRemoveVectoredExceptionHandler(PVOID); +NTSYSAPI void WINAPI RtlResetRtlTranslations(const NLSTABLEINFO*); NTSYSAPI void WINAPI RtlRestoreLastWin32Error(DWORD); NTSYSAPI void WINAPI RtlSecondsSince1970ToTime(DWORD,LARGE_INTEGER *); NTSYSAPI void WINAPI RtlSecondsSince1980ToTime(DWORD,LARGE_INTEGER *);