From: Fabian Maurer dark.shadow4@web.de
--- dlls/ntdll/unix/server.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/unix/server.c b/dlls/ntdll/unix/server.c index e5e234d05ae..b84f53806c3 100644 --- a/dlls/ntdll/unix/server.c +++ b/dlls/ntdll/unix/server.c @@ -1269,6 +1269,26 @@ static const char *init_server_dir( dev_t dev, ino_t ino ) return dir; }
+/* Copied from shell32/shellpath, changed to use strtok */ +static BOOL isolate_folder(const char *folder) +{ + char buffer[200]; + char *current; + const char *isolate = getenv("WINEISOLATE"); + + if (!isolate || strlen(isolate) > ARRAY_SIZE(buffer)) + return FALSE; + + strcpy(buffer, isolate); + current = strtok(buffer, ","); + while (current) + { + if (!strcmp(current, folder)) + return TRUE; + current = strtok(NULL, ","); + } + return FALSE; +}
/*********************************************************************** * setup_config_dir @@ -1307,7 +1327,8 @@ static int setup_config_dir(void) { mkdir( "drive_c", 0777 ); symlink( "../drive_c", "dosdevices/c:" ); - symlink( "/", "dosdevices/z:" ); + if (!isolate_folder("root")) + symlink( "/", "dosdevices/z:" ); } else if (errno != EEXIST) fatal_perror( "cannot create %s/dosdevices", config_dir );