aboutsummaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/asshelp.c5
-rw-r--r--common/exechelp-posix.c18
-rw-r--r--common/exechelp-w32.c36
-rw-r--r--common/exechelp.h10
-rw-r--r--common/exectool.c2
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);