From cdaa72c728df3c80499c8a4f59e731f353347db0 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Fri, 18 Dec 2020 15:20:45 +0100 Subject: [PATCH] ntdll: Only reset the Unix current directory on removable devices. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=49545 Signed-off-by: Alexandre Julliard --- dlls/ntdll/unix/env.c | 1 - dlls/ntdll/unix/server.c | 11 ++++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/dlls/ntdll/unix/env.c b/dlls/ntdll/unix/env.c index f6775fc37a4..e9a40495c9d 100644 --- a/dlls/ntdll/unix/env.c +++ b/dlls/ntdll/unix/env.c @@ -1348,7 +1348,6 @@ void CDECL get_initial_directory( UNICODE_STRING *dir ) MESSAGE("Warning: could not find DOS drive for current working directory '%s', " "starting in the Windows directory.\n", cwd ? cwd : "" ); free( cwd ); - chdir( "/" ); /* avoid locking removable devices */ } diff --git a/dlls/ntdll/unix/server.c b/dlls/ntdll/unix/server.c index 7236f0acb83..87dd4b10b83 100644 --- a/dlls/ntdll/unix/server.c +++ b/dlls/ntdll/unix/server.c @@ -1466,7 +1466,16 @@ void server_init_process_done(void) IMAGE_NT_HEADERS *nt = get_exe_nt_header(); void *entry = (char *)peb->ImageBaseAddress + nt->OptionalHeader.AddressOfEntryPoint; NTSTATUS status; - int suspend; + int suspend, needs_close, unixdir; + + if (peb->ProcessParameters->CurrentDirectory.Handle && + !server_get_unix_fd( peb->ProcessParameters->CurrentDirectory.Handle, + FILE_TRAVERSE, &unixdir, &needs_close, NULL, NULL )) + { + fchdir( unixdir ); + if (needs_close) close( unixdir ); + } + else chdir( "/" ); /* avoid locking removable devices */ #ifdef __APPLE__ send_server_task_port(); -- 2.11.4.GIT