From: Daniel Lehman dlehman25@gmail.com
--- dlls/msvcp140/tests/msvcp140.c | 10 +++++----- dlls/msvcrt/data.c | 20 ++++++++++++++------ dlls/ucrtbase/tests/file.c | 16 +++++++--------- 3 files changed, 26 insertions(+), 20 deletions(-)
diff --git a/dlls/msvcp140/tests/msvcp140.c b/dlls/msvcp140/tests/msvcp140.c index 284061e6aa9..250ead1bc76 100644 --- a/dlls/msvcp140/tests/msvcp140.c +++ b/dlls/msvcp140/tests/msvcp140.c @@ -1712,11 +1712,11 @@ static void test__Fiopen(void) int is_todo; } tests[] = { { "German.utf8", "t\xc3\xa4\xc3\x8f\xc3\xb6\xc3\x9f.txt", TRUE }, - { "Polish.utf8", "t\xc4\x99\xc5\x9b\xc4\x87.txt", TRUE }, - { "Turkish.utf8", "t\xc3\x87\xc4\x9e\xc4\xb1\xc4\xb0\xc5\x9e.txt", TRUE }, - { "Arabic.utf8", "t\xd8\xaa\xda\x86.txt", TRUE }, - { "Japanese.utf8", "t\xe3\x82\xaf\xe3\x83\xa4.txt", TRUE }, - { "Chinese.utf8", "t\xe4\xb8\x82\xe9\xbd\xab.txt", TRUE }, + { "Polish.utf8", "t\xc4\x99\xc5\x9b\xc4\x87.txt" }, + { "Turkish.utf8", "t\xc3\x87\xc4\x9e\xc4\xb1\xc4\xb0\xc5\x9e.txt" }, + { "Arabic.utf8", "t\xd8\xaa\xda\x86.txt" }, + { "Japanese.utf8", "t\xe3\x82\xaf\xe3\x83\xa4.txt" }, + { "Chinese.utf8", "t\xe4\xb8\x82\xe9\xbd\xab.txt" }, };
for(i=0; i<ARRAY_SIZE(tests); i++) { diff --git a/dlls/msvcrt/data.c b/dlls/msvcrt/data.c index 6e764e52eae..5dd113b1c5a 100644 --- a/dlls/msvcrt/data.c +++ b/dlls/msvcrt/data.c @@ -60,6 +60,8 @@ int MSVCRT_app_type = 0; char* MSVCRT__pgmptr = NULL; WCHAR* MSVCRT__wpgmptr = NULL;
+unsigned int CDECL ___lc_codepage_func(void); + static char **build_argv( WCHAR **wargv ) { int argc; @@ -299,12 +301,18 @@ int CDECL _get_osplatform(int *pValue) /* INTERNAL: Create a wide string from an ascii string */ wchar_t *msvcrt_wstrdupa(const char *str) { - const unsigned int len = strlen(str) + 1 ; - wchar_t *wstr = malloc(len* sizeof (wchar_t)); - if (!wstr) - return NULL; - MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED,str,len,wstr,len); - return wstr; + const unsigned int len = strlen(str) + 1 ; + wchar_t *wstr = malloc(len*sizeof (wchar_t)); + if(!wstr) + return NULL; + +#if _MSVCR_VER >= 140 + MultiByteToWideChar(___lc_codepage_func() == CP_UTF8 ? CP_UTF8 : CP_ACP, + MB_PRECOMPOSED,str,len,wstr,len); +#else + MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED,str,len,wstr,len); +#endif + return wstr; }
/********************************************************************* diff --git a/dlls/ucrtbase/tests/file.c b/dlls/ucrtbase/tests/file.c index ef3b5bfca33..6bf7189a707 100644 --- a/dlls/ucrtbase/tests/file.c +++ b/dlls/ucrtbase/tests/file.c @@ -177,14 +177,13 @@ static void test_fopen(void) static const struct { const char *loc; const char *path; - int is_todo; } tests[] = { - { "German.utf8", "t\xc3\xa4\xc3\x8f\xc3\xb6\xc3\x9f.txt", TRUE }, - { "Polish.utf8", "t\xc4\x99\xc5\x9b\xc4\x87.txt", TRUE }, - { "Turkish.utf8", "t\xc3\x87\xc4\x9e\xc4\xb1\xc4\xb0\xc5\x9e.txt", TRUE }, - { "Arabic.utf8", "t\xd8\xaa\xda\x86.txt", TRUE }, - { "Japanese.utf8", "t\xe3\x82\xaf\xe3\x83\xa4.txt", TRUE }, - { "Chinese.utf8", "t\xe4\xb8\x82\xe9\xbd\xab.txt", TRUE }, + { "German.utf8", "t\xc3\xa4\xc3\x8f\xc3\xb6\xc3\x9f.txt" }, + { "Polish.utf8", "t\xc4\x99\xc5\x9b\xc4\x87.txt" }, + { "Turkish.utf8", "t\xc3\x87\xc4\x9e\xc4\xb1\xc4\xb0\xc5\x9e.txt" }, + { "Arabic.utf8", "t\xd8\xaa\xda\x86.txt" }, + { "Japanese.utf8", "t\xe3\x82\xaf\xe3\x83\xa4.txt" }, + { "Chinese.utf8", "t\xe4\xb8\x82\xe9\xbd\xab.txt" }, };
for(i=0; i<ARRAY_SIZE(tests); i++) { @@ -204,9 +203,8 @@ static void test_fopen(void) fclose(f);
f = _wfsopen(wpath, L"r", SH_DENYNO); - todo_wine_if(tests[i].is_todo) ok(!!f, "failed to open %s with locale %s\n", tests[i].path, tests[i].loc); - if(f) fclose(f); + fclose(f);
unlink(tests[i].path); }