diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c index 09ab077896c..200ea8bc97e 100644 --- a/dlls/kernel32/process.c +++ b/dlls/kernel32/process.c @@ -2029,6 +2029,27 @@ static BOOL terminate_main_thread(void) } #endif + +/*********************************************************************** + * set_stdio_fd + */ +static void set_stdio_fd( int stdin_fd, int stdout_fd ) +{ + int fd = -1; + + if (stdin_fd == -1 || stdout_fd == -1) + { + fd = open( "/dev/null", O_RDWR ); + if (stdin_fd == -1) stdin_fd = fd; + if (stdout_fd == -1) stdout_fd = fd; + } + + dup2( stdin_fd, 0 ); + dup2( stdout_fd, 1 ); + if (fd != -1) close( fd ); +} + + /*********************************************************************** * spawn_loader */ @@ -2060,21 +2081,10 @@ static pid_t spawn_loader( const RTL_USER_PROCESS_PARAMETERS *params, int socket if (params->ConsoleFlags || params->ConsoleHandle == KERNEL32_CONSOLE_ALLOC || (params->hStdInput == INVALID_HANDLE_VALUE && params->hStdOutput == INVALID_HANDLE_VALUE)) { - int fd = open( "/dev/null", O_RDWR ); setsid(); - /* close stdin and stdout */ - if (fd != -1) - { - dup2( fd, 0 ); - dup2( fd, 1 ); - close( fd ); - } - } - else - { - if (stdin_fd != -1) dup2( stdin_fd, 0 ); - if (stdout_fd != -1) dup2( stdout_fd, 1 ); + set_stdio_fd( -1, -1 ); /* close stdin and stdout */ } + else set_stdio_fd( stdin_fd, stdout_fd ); if (stdin_fd != -1) close( stdin_fd ); if (stdout_fd != -1) close( stdout_fd );