From: Piotr Caban piotr@codeweavers.com
--- dlls/msvcrt/file.c | 12 +++--------- dlls/ucrtbase/tests/file.c | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c index 422e7712660..044e1c99dee 100644 --- a/dlls/msvcrt/file.c +++ b/dlls/msvcrt/file.c @@ -4351,19 +4351,13 @@ FILE * CDECL _wfsopen(const wchar_t *path, const wchar_t *mode, int share) */ FILE * CDECL _fsopen(const char *path, const char *mode, int share) { - FILE *ret; wchar_t *pathW = NULL, *modeW = NULL; + FILE *ret;
- if (path && !(pathW = msvcrt_wstrdupa(path))) { - _invalid_parameter(NULL, NULL, NULL, 0, 0); - *_errno() = EINVAL; - return NULL; - } - if (mode && !(modeW = msvcrt_wstrdupa(mode))) + if (path && !(pathW = wstrdupa_utf8(path))) return NULL; + if (mode && !(modeW = wstrdupa_utf8(mode))) { free(pathW); - _invalid_parameter(NULL, NULL, NULL, 0, 0); - *_errno() = EINVAL; return NULL; }
diff --git a/dlls/ucrtbase/tests/file.c b/dlls/ucrtbase/tests/file.c index da0103265be..8b696880eea 100644 --- a/dlls/ucrtbase/tests/file.c +++ b/dlls/ucrtbase/tests/file.c @@ -232,10 +232,13 @@ static BOOL is_lossless_convertion(const char *str)
static void test_utf8(void) { + const char file[] = "file\xc4\x99\xc5\x9b\xc4\x87"; const char dir[] = "dir\xc4\x99\xc5\x9b\xc4\x87"; + const WCHAR fileW[] = L"file\x0119\x015b\x0107"; const WCHAR dirW[] = L"dir\x0119\x015b\x0107";
char buf[256], *p; + FILE *f; int ret;
if (!setlocale(LC_ALL, ".utf8")) @@ -276,6 +279,18 @@ static void test_utf8(void) todo_wine_if(!is_lossless_convertion(dir)) ok(!strcmp(p + 1, dir), "unexpected working directory: %s\n", debugstr_a(buf));
+ f = fopen(file, "w"); + ok(!!f, "fopen returned %d, error %d\n", ret, errno); + fclose(f); + + ret = _wunlink(fileW); + todo_wine_if(GetACP() != CP_UTF8) ok(!ret, "_wunlink returned %d, errno %d\n", ret, errno); + if (ret) + { + ret = _unlink(file); + ok(!ret, "_unlink returned %d, errno %d\n", ret, errno); + } + ret = _chdir(".."); ok(!ret, "_chdir returned %d, error %d\n", ret, errno);