From: Piotr Caban piotr@codeweavers.com
--- dlls/msvcrt/dir.c | 13 +++++++------ dlls/ucrtbase/tests/file.c | 5 +++++ 2 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/dlls/msvcrt/dir.c b/dlls/msvcrt/dir.c index 4fd0d200500..d574a4ae22e 100644 --- a/dlls/msvcrt/dir.c +++ b/dlls/msvcrt/dir.c @@ -274,12 +274,13 @@ static void msvcrt_wfttofd64i32( const WIN32_FIND_DATAW *fd, struct _wfinddata64 */ int CDECL _chdir(const char * newdir) { - if (!SetCurrentDirectoryA(newdir)) - { - msvcrt_set_errno(newdir?GetLastError():0); - return -1; - } - return 0; + wchar_t *newdirW = NULL; + int ret; + + if (newdir && !(newdirW = wstrdupa_utf8(newdir))) return -1; + ret = _wchdir(newdirW); + free(newdirW); + return ret; }
/********************************************************************* diff --git a/dlls/ucrtbase/tests/file.c b/dlls/ucrtbase/tests/file.c index ec2035a9f91..681715e81c8 100644 --- a/dlls/ucrtbase/tests/file.c +++ b/dlls/ucrtbase/tests/file.c @@ -239,6 +239,11 @@ static void test_utf8(void) } ok(!ret, "_mkdir returned %d, error %d\n", ret, errno);
+ ret = _chdir(dir); + ok(!ret, "_chdir returned %d, error %d\n", ret, errno); + ret = _chdir(".."); + ok(!ret, "_chdir returned %d, error %d\n", ret, errno); + ret = _wrmdir(dirW); todo_wine ok(!ret, "_wrmdir returned %d, errno %d\n", ret, errno); if (ret)