diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/asshelp.c | 5 | ||||
-rw-r--r-- | common/exechelp-posix.c | 18 | ||||
-rw-r--r-- | common/exechelp-w32.c | 36 | ||||
-rw-r--r-- | common/exechelp.h | 10 | ||||
-rw-r--r-- | common/exectool.c | 2 |
5 files changed, 34 insertions, 37 deletions
diff --git a/common/asshelp.c b/common/asshelp.c index 2053c55e6..8b3df2a4b 100644 --- a/common/asshelp.c +++ b/common/asshelp.c @@ -528,10 +528,7 @@ start_new_service (assuan_context_t *r_ctx, NULL, NULL, NULL); #else /*!W32*/ err = gnupg_process_spawn (program? program : program_name, argv, - (GNUPG_PROCESS_STDIN_NULL - |GNUPG_PROCESS_STDOUT_NULL - |GNUPG_PROCESS_STDERR_NULL), - NULL, NULL, NULL); + 0, NULL, NULL, NULL); #endif /*!W32*/ if (err) log_error ("failed to start %s '%s': %s\n", diff --git a/common/exechelp-posix.c b/common/exechelp-posix.c index 8e37473d8..6db7fdff1 100644 --- a/common/exechelp-posix.c +++ b/common/exechelp-posix.c @@ -646,14 +646,14 @@ gnupg_process_spawn (const char *pgmname, const char *argv1[], return ec; } } - else if ((flags & GNUPG_PROCESS_STDIN_NULL)) + else if ((flags & GNUPG_PROCESS_STDIN_KEEP)) { - fd_in[0] = -1; + fd_in[0] = 0; fd_in[1] = -1; } else { - fd_in[0] = 0; + fd_in[0] = -1; fd_in[1] = -1; } @@ -671,15 +671,15 @@ gnupg_process_spawn (const char *pgmname, const char *argv1[], return ec; } } - else if ((flags & GNUPG_PROCESS_STDOUT_NULL)) + else if ((flags & GNUPG_PROCESS_STDOUT_KEEP)) { fd_out[0] = -1; - fd_out[1] = -1; + fd_out[1] = 1; } else { fd_out[0] = -1; - fd_out[1] = 1; + fd_out[1] = -1; } } @@ -701,15 +701,15 @@ gnupg_process_spawn (const char *pgmname, const char *argv1[], return ec; } } - else if ((flags & GNUPG_PROCESS_STDERR_NULL)) + else if ((flags & GNUPG_PROCESS_STDERR_KEEP)) { fd_err[0] = -1; - fd_err[1] = -1; + fd_err[1] = 2; } else { fd_err[0] = -1; - fd_err[1] = 2; + fd_err[1] = -1; } pre_syscall (); diff --git a/common/exechelp-w32.c b/common/exechelp-w32.c index 3ef261fa3..9da82304d 100644 --- a/common/exechelp-w32.c +++ b/common/exechelp-w32.c @@ -639,14 +639,14 @@ gnupg_process_spawn (const char *pgmname, const char *argv[], return ec; } } - else if ((flags & GNUPG_PROCESS_STDIN_NULL)) + else if ((flags & GNUPG_PROCESS_STDIN_KEEP)) { - hd_in[0] = w32_open_null (0); + hd_in[0] = GetStdHandle (STD_INPUT_HANDLE); hd_in[1] = INVALID_HANDLE_VALUE; } else { - hd_in[0] = GetStdHandle (STD_INPUT_HANDLE); + hd_in[0] = w32_open_null (0); hd_in[1] = INVALID_HANDLE_VALUE; } @@ -664,15 +664,15 @@ gnupg_process_spawn (const char *pgmname, const char *argv[], return ec; } } - else if ((flags & GNUPG_PROCESS_STDOUT_NULL)) + else if ((flags & GNUPG_PROCESS_STDOUT_KEEP)) { hd_out[0] = INVALID_HANDLE_VALUE; - hd_out[1] = w32_open_null (1); + hd_out[1] = GetStdHandle (STD_OUTPUT_HANDLE); } else { hd_out[0] = INVALID_HANDLE_VALUE; - hd_out[1] = GetStdHandle (STD_OUTPUT_HANDLE); + hd_out[1] = w32_open_null (1); } if ((flags & GNUPG_PROCESS_STDERR_PIPE)) @@ -693,15 +693,15 @@ gnupg_process_spawn (const char *pgmname, const char *argv[], return ec; } } - else if ((flags & GNUPG_PROCESS_STDERR_NULL)) + else if ((flags & GNUPG_PROCESS_STDERR_KEEP)) { hd_err[0] = INVALID_HANDLE_VALUE; - hd_err[1] = w32_open_null (1); + hd_err[1] = GetStdHandle (STD_ERROR_HANDLE); } else { hd_err[0] = INVALID_HANDLE_VALUE; - hd_err[1] = GetStdHandle (STD_ERROR_HANDLE); + hd_err[1] = w32_open_null (1); } memset (&si, 0, sizeof si); @@ -754,19 +754,19 @@ gnupg_process_spawn (const char *pgmname, const char *argv[], if (si.lpAttributeList == NULL) { if ((flags & GNUPG_PROCESS_STDIN_PIPE) - || (flags & GNUPG_PROCESS_STDIN_NULL)) + || !(flags & GNUPG_PROCESS_STDIN_KEEP)) CloseHandle (hd_in[0]); if ((flags & GNUPG_PROCESS_STDIN_PIPE)) CloseHandle (hd_in[1]); if ((flags & GNUPG_PROCESS_STDOUT_PIPE)) CloseHandle (hd_out[0]); if ((flags & GNUPG_PROCESS_STDOUT_PIPE) - || (flags & GNUPG_PROCESS_STDOUT_NULL)) + || !(flags & GNUPG_PROCESS_STDOUT_KEEP)) CloseHandle (hd_out[1]); if ((flags & GNUPG_PROCESS_STDERR_PIPE)) CloseHandle (hd_err[0]); if ((flags & GNUPG_PROCESS_STDERR_PIPE) - || (flags & GNUPG_PROCESS_STDERR_NULL)) + || !(flags & GNUPG_PROCESS_STDERR_KEEP)) CloseHandle (hd_err[1]); xfree (wpgmname); xfree (wcmdline); @@ -824,19 +824,19 @@ gnupg_process_spawn (const char *pgmname, const char *argv[], log_error ("CreateProcess failed: ec=%d\n", (int)GetLastError ()); if ((flags & GNUPG_PROCESS_STDIN_PIPE) - || (flags & GNUPG_PROCESS_STDIN_NULL)) + || !(flags & GNUPG_PROCESS_STDIN_KEEP)) CloseHandle (hd_in[0]); if ((flags & GNUPG_PROCESS_STDIN_PIPE)) CloseHandle (hd_in[1]); if ((flags & GNUPG_PROCESS_STDOUT_PIPE)) CloseHandle (hd_out[0]); if ((flags & GNUPG_PROCESS_STDOUT_PIPE) - || (flags & GNUPG_PROCESS_STDOUT_NULL)) + || !(flags & GNUPG_PROCESS_STDOUT_KEEP)) CloseHandle (hd_out[1]); if ((flags & GNUPG_PROCESS_STDERR_PIPE)) CloseHandle (hd_err[0]); if ((flags & GNUPG_PROCESS_STDERR_PIPE) - || (flags & GNUPG_PROCESS_STDERR_NULL)) + || !(flags & GNUPG_PROCESS_STDERR_KEEP)) CloseHandle (hd_err[1]); xfree (wpgmname); xfree (wcmdline); @@ -852,13 +852,13 @@ gnupg_process_spawn (const char *pgmname, const char *argv[], xfree (cmdline); if ((flags & GNUPG_PROCESS_STDIN_PIPE) - || (flags & GNUPG_PROCESS_STDIN_NULL)) + || !(flags & GNUPG_PROCESS_STDIN_KEEP)) CloseHandle (hd_in[0]); if ((flags & GNUPG_PROCESS_STDOUT_PIPE) - || (flags & GNUPG_PROCESS_STDOUT_NULL)) + || !(flags & GNUPG_PROCESS_STDOUT_KEEP)) CloseHandle (hd_out[1]); if ((flags & GNUPG_PROCESS_STDERR_PIPE) - || (flags & GNUPG_PROCESS_STDERR_NULL)) + || !(flags & GNUPG_PROCESS_STDERR_KEEP)) CloseHandle (hd_err[1]); /* log_debug ("CreateProcess ready: hProcess=%p hThread=%p" */ diff --git a/common/exechelp.h b/common/exechelp.h index 1e80a7597..7ef2234c8 100644 --- a/common/exechelp.h +++ b/common/exechelp.h @@ -101,13 +101,13 @@ struct spawn_cb_arg { #define GNUPG_PROCESS_STDOUT_PIPE (1 << 9) #define GNUPG_PROCESS_STDERR_PIPE (1 << 10) #define GNUPG_PROCESS_STDINOUT_SOCKETPAIR (1 << 11) -#define GNUPG_PROCESS_STDIN_NULL (1 << 12) -#define GNUPG_PROCESS_STDOUT_NULL (1 << 13) -#define GNUPG_PROCESS_STDERR_NULL (1 << 14) +#define GNUPG_PROCESS_STDIN_KEEP (1 << 12) +#define GNUPG_PROCESS_STDOUT_KEEP (1 << 13) +#define GNUPG_PROCESS_STDERR_KEEP (1 << 14) #define GNUPG_PROCESS_STDFDS_SETTING ( GNUPG_PROCESS_STDIN_PIPE \ | GNUPG_PROCESS_STDOUT_PIPE | GNUPG_PROCESS_STDERR_PIPE \ - | GNUPG_PROCESS_STDINOUT_SOCKETPAIR | GNUPG_PROCESS_STDIN_NULL \ - | GNUPG_PROCESS_STDOUT_NULL | GNUPG_PROCESS_STDERR_NULL) + | GNUPG_PROCESS_STDINOUT_SOCKETPAIR | GNUPG_PROCESS_STDIN_KEEP \ + | GNUPG_PROCESS_STDOUT_KEEP | GNUPG_PROCESS_STDERR_KEEP) #define GNUPG_PROCESS_STREAM_NONBLOCK (1 << 16) diff --git a/common/exectool.c b/common/exectool.c index 9a8e61c20..3505c25f1 100644 --- a/common/exectool.c +++ b/common/exectool.c @@ -416,7 +416,7 @@ gnupg_exec_tool_stream (const char *pgmname, const char *argv[], err = gnupg_process_spawn (pgmname, argv, ((input ? GNUPG_PROCESS_STDIN_PIPE - : GNUPG_PROCESS_STDIN_NULL) + : 0) | GNUPG_PROCESS_STDOUT_PIPE | GNUPG_PROCESS_STDERR_PIPE), gnupg_spawn_helper, exceptclose, &proc); |