From 020b3510ae69fcb4ea93bd9e678cac940b3c814a Mon Sep 17 00:00:00 2001 From: Romain Vimont Date: Sun, 14 Nov 2021 19:51:42 +0100 Subject: [PATCH] Inherit handles only if necessary on Windows Refs #2779 --- app/src/sys/win/process.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/sys/win/process.c b/app/src/sys/win/process.c index 4dcd542e..43ac4c73 100644 --- a/app/src/sys/win/process.c +++ b/app/src/sys/win/process.c @@ -26,6 +26,8 @@ sc_process_execute_p(const char *const argv[], HANDLE *handle, HANDLE *pin, HANDLE *pout, HANDLE *perr) { enum sc_process_result ret = SC_PROCESS_ERROR_GENERIC; + bool inherit_handles = pin || pout || perr; + SECURITY_ATTRIBUTES sa; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor = NULL; @@ -69,7 +71,7 @@ sc_process_execute_p(const char *const argv[], HANDLE *handle, PROCESS_INFORMATION pi; memset(&si, 0, sizeof(si)); si.cb = sizeof(si); - if (pin || pout || perr) { + if (inherit_handles) { si.dwFlags = STARTF_USESTDHANDLES; if (pin) { si.hStdInput = stdin_read_handle; @@ -95,8 +97,8 @@ sc_process_execute_p(const char *const argv[], HANDLE *handle, goto error_close_stderr; } - if (!CreateProcessW(NULL, wide, NULL, NULL, TRUE, 0, NULL, NULL, &si, - &pi)) { + if (!CreateProcessW(NULL, wide, NULL, NULL, inherit_handles, 0, NULL, NULL, + &si, &pi)) { free(wide); *handle = NULL;