diff --git a/src/process/windows/SDL_windowsprocess.c b/src/process/windows/SDL_windowsprocess.c index 5c4bde8699..dfefa54f38 100644 --- a/src/process/windows/SDL_windowsprocess.c +++ b/src/process/windows/SDL_windowsprocess.c @@ -263,6 +263,7 @@ bool SDL_SYS_CreateProcessWithProperties(SDL_Process *process, SDL_PropertiesID HANDLE stdin_pipe[2] = { INVALID_HANDLE_VALUE, INVALID_HANDLE_VALUE }; HANDLE stdout_pipe[2] = { INVALID_HANDLE_VALUE, INVALID_HANDLE_VALUE }; HANDLE stderr_pipe[2] = { INVALID_HANDLE_VALUE, INVALID_HANDLE_VALUE }; + HANDLE handle; DWORD pipe_mode = PIPE_NOWAIT; bool result = false; @@ -357,7 +358,10 @@ bool SDL_SYS_CreateProcessWithProperties(SDL_Process *process, SDL_PropertiesID break; case SDL_PROCESS_STDIO_INHERITED: default: - if (!DuplicateHandle(GetCurrentProcess(), GetStdHandle(STD_INPUT_HANDLE), + handle = GetStdHandle(STD_INPUT_HANDLE); + if (!handle) { + startup_info.hStdInput = NULL; + } else if (!DuplicateHandle(GetCurrentProcess(), handle, GetCurrentProcess(), &startup_info.hStdInput, 0, TRUE, DUPLICATE_SAME_ACCESS)) { startup_info.hStdInput = INVALID_HANDLE_VALUE; @@ -394,7 +398,10 @@ bool SDL_SYS_CreateProcessWithProperties(SDL_Process *process, SDL_PropertiesID break; case SDL_PROCESS_STDIO_INHERITED: default: - if (!DuplicateHandle(GetCurrentProcess(), GetStdHandle(STD_OUTPUT_HANDLE), + handle = GetStdHandle(STD_OUTPUT_HANDLE); + if (!handle) { + startup_info.hStdOutput = NULL; + } else if (!DuplicateHandle(GetCurrentProcess(), handle, GetCurrentProcess(), &startup_info.hStdOutput, 0, TRUE, DUPLICATE_SAME_ACCESS)) { startup_info.hStdOutput = INVALID_HANDLE_VALUE; @@ -405,7 +412,10 @@ bool SDL_SYS_CreateProcessWithProperties(SDL_Process *process, SDL_PropertiesID } if (redirect_stderr) { - if (!DuplicateHandle(GetCurrentProcess(), startup_info.hStdOutput, + handle = startup_info.hStdOutput; + if (!handle) { + startup_info.hStdError = NULL; + } else if (!DuplicateHandle(GetCurrentProcess(), handle, GetCurrentProcess(), &startup_info.hStdError, 0, TRUE, DUPLICATE_SAME_ACCESS)) { startup_info.hStdError = INVALID_HANDLE_VALUE; @@ -440,7 +450,10 @@ bool SDL_SYS_CreateProcessWithProperties(SDL_Process *process, SDL_PropertiesID break; case SDL_PROCESS_STDIO_INHERITED: default: - if (!DuplicateHandle(GetCurrentProcess(), GetStdHandle(STD_ERROR_HANDLE), + handle = GetStdHandle(STD_ERROR_HANDLE); + if (!handle) { + startup_info.hStdError = NULL; + } else if (!DuplicateHandle(GetCurrentProcess(), handle, GetCurrentProcess(), &startup_info.hStdError, 0, TRUE, DUPLICATE_SAME_ACCESS)) { startup_info.hStdError = INVALID_HANDLE_VALUE;