Josh DuBois : ntdll: Use root of c: drive as fallback cwd during startup.

Alexandre Julliard julliard at winehq.org
Thu Sep 6 15:51:52 CDT 2018


Module: wine
Branch: master
Commit: 7f567451b29b1c1d3e16f147136e00f545d640b1
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=7f567451b29b1c1d3e16f147136e00f545d640b1

Author: Josh DuBois <duboisj at codeweavers.com>
Date:   Thu Sep  6 12:21:48 2018 -0500

ntdll: Use root of c: drive as fallback cwd during startup.

Signed-off-by: Josh DuBois <duboisj at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ntdll/server.c | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/dlls/ntdll/server.c b/dlls/ntdll/server.c
index c1f231e..ec03445 100644
--- a/dlls/ntdll/server.c
+++ b/dlls/ntdll/server.c
@@ -1124,9 +1124,10 @@ static void start_server(void)
  *
  * Setup the wine configuration dir.
  */
-static void setup_config_dir(void)
+static int setup_config_dir(void)
 {
     const char *p, *config_dir = wine_get_config_dir();
+    int fd_cwd = open( ".", O_RDONLY );
 
     if (chdir( config_dir ) == -1)
     {
@@ -1154,7 +1155,7 @@ static void setup_config_dir(void)
 
     if (mkdir( "dosdevices", 0777 ) == -1)
     {
-        if (errno == EEXIST) return;
+        if (errno == EEXIST) goto done;
         fatal_perror( "cannot create %s/dosdevices\n", config_dir );
     }
 
@@ -1163,6 +1164,11 @@ static void setup_config_dir(void)
     mkdir( "drive_c", 0777 );
     symlink( "../drive_c", "dosdevices/c:" );
     symlink( "/", "dosdevices/z:" );
+
+done:
+    if (fd_cwd == -1) fd_cwd = open( "dosdevices/c:", O_RDONLY );
+    fcntl( fd_cwd, F_SETFD, FD_CLOEXEC );
+    return fd_cwd;
 }
 
 
@@ -1212,11 +1218,7 @@ static int server_connect(void)
     struct stat st;
     int s, slen, retry, fd_cwd;
 
-    /* retrieve the current directory */
-    fd_cwd = open( ".", O_RDONLY );
-    if (fd_cwd != -1) fcntl( fd_cwd, F_SETFD, FD_CLOEXEC );
-
-    setup_config_dir();
+    fd_cwd = setup_config_dir();
     serverdir = wine_get_server_dir();
 
     /* chdir to the server directory */




More information about the wine-cvs mailing list