From 34de8c69b3f2fdfae9e2bdf8bc6765c01129c12c Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 20 Mar 2016 10:51:14 +0000 Subject: [PATCH 1/1] [NTDLL_APITEST] Set correct locale in RtlGenerate8dot3Name test. This makes the test reproducible on every target plateform. Patch by Mark Jansen. ROSTESTS-218 #resolve #comment Patch commited in r71027. Thanks! svn path=/trunk/; revision=71027 --- .../apitests/ntdll/RtlGenerate8dot3Name.c | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/rostests/apitests/ntdll/RtlGenerate8dot3Name.c b/rostests/apitests/ntdll/RtlGenerate8dot3Name.c index 437ce66f1c4..ce3d0a6ad66 100644 --- a/rostests/apitests/ntdll/RtlGenerate8dot3Name.c +++ b/rostests/apitests/ntdll/RtlGenerate8dot3Name.c @@ -9,6 +9,7 @@ #define WIN32_NO_STATUS #include +#include NTSYSAPI VOID @@ -24,11 +25,57 @@ PWSTR ShortNames1[] = { L"MENUDM~1", L"SLECTE~1.LNK", L"5C2D~1.TXT", L"423C~1.TX PWSTR ShortNames2[] = { L"MENUDM~2", L"SLECTE~2.LNK", L"5C2D~2.TXT", L"423C~2.TXT", L"925E~2.TXT", L"7E4C~2.TXT", L"EEAUC~2.TXT", L"ECU~2.TXT", L"TEST~2.X", L"T$T~2.TXT", L"LONGFI~2.TXT", L"LONGFI~2", L"LONGFI~2.TXT", L"LONGFI~2" }; PWSTR ExShortNames1[] = { L"MENUDÉ~1", L"SÉLECT~1.LNK", L"ÉÈÀÙÇ~1.TXT", L"ÇÙÀÈÉ~1.TXT", L"ÉÈÀÙ~1.TXT", L"ÇÙÀÈ~1.TXT", L"ÉÈÀÙÇE~1.TXT", L"ÉEÈÉÇC~1.TXT", L"TEST~1.ÉXÈ", L"T£$T¤~1.TXT", L"LONGFI~1.TXT", L"LONGFI~1", L"LONGFI~1.TXT", L"LONGFI~1" }; PWSTR ExShortNames2[] = { L"MENUDÉ~2", L"SÉLECT~2.LNK", L"ÉÈÀÙÇ~2.TXT", L"ÇÙÀÈÉ~2.TXT", L"ÉÈÀÙ~2.TXT", L"ÇÙÀÈ~2.TXT", L"ÉÈÀÙÇE~2.TXT", L"ÉEÈÉÇC~2.TXT", L"TEST~2.ÉXÈ", L"T£$T¤~2.TXT", L"LONGFI~2.TXT", L"LONGFI~2", L"LONGFI~2.TXT", L"LONGFI~2" }; + +PVOID LoadCodePageData(ULONG Code) +{ + char filename[MAX_PATH], sysdir[MAX_PATH]; + HANDLE hFile; + PVOID Data = NULL; + GetSystemDirectoryA(sysdir, MAX_PATH); + + if (Code != -1) + sprintf(filename, "%s\\c_%lu.nls", sysdir, Code); + else + sprintf(filename, "%s\\l_intl.nls", sysdir); + + hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); + if (hFile != INVALID_HANDLE_VALUE) + { + DWORD dwRead; + DWORD dwFileSize = GetFileSize(hFile, NULL); + Data = malloc(dwFileSize); + ReadFile(hFile, Data, dwFileSize, &dwRead, NULL); + CloseHandle(hFile); + } + return Data; +} + +/* https://www.microsoft.com/resources/msdn/goglobal/default.mspx */ +void SetupLocale(ULONG AnsiCode, ULONG OemCode, ULONG Unicode) +{ + NLSTABLEINFO NlsTable; + PVOID AnsiCodePageData; + PVOID OemCodePageData; + PVOID UnicodeCaseTableData; + + AnsiCodePageData = LoadCodePageData(AnsiCode); + OemCodePageData = LoadCodePageData(OemCode); + UnicodeCaseTableData = LoadCodePageData(Unicode); + + RtlInitNlsTables(AnsiCodePageData, OemCodePageData, UnicodeCaseTableData, &NlsTable); + RtlResetRtlTranslations(&NlsTable); + /* Do NOT free the buffers here, they are directly used! + Yes, we leak the old buffers, but this is a test anyway... */ + +} START_TEST(RtlGenerate8dot3Name) { USHORT i; + /* Set a french locale. */ + SetupLocale(1252, 850, -1); + for (i = 0; i < 14; ++i) { WCHAR Buffer[12]; -- 2.17.1