aboutsummaryrefslogtreecommitdiffstats
path: root/src/spawn-w32.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/spawn-w32.c')
-rw-r--r--src/spawn-w32.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/src/spawn-w32.c b/src/spawn-w32.c
index 963b6a5..d17f971 100644
--- a/src/spawn-w32.c
+++ b/src/spawn-w32.c
@@ -642,8 +642,8 @@ _gpgrt_spawn_process (const char *pgmname, const char *argv[],
gpg_err_code_t
_gpgrt_spawn_process_fd (const char *pgmname, const char *argv[],
int infd, int outfd, int errfd,
- void (*after_fork_cb)(void *),
- void *after_fork_cb_arg,
+ int (*spawn_cb) (void *),
+ void *spawn_cb_arg,
pid_t *pid)
{
gpg_err_code_t err;
@@ -653,9 +653,10 @@ _gpgrt_spawn_process_fd (const char *pgmname, const char *argv[],
char *cmdline;
int ret, i;
HANDLE stdhd[3];
+ int ask_inherit = 0;
- (void)after_fork_cb;
- (void)after_fork_cb_arg;
+ if (spawn_cb)
+ ask_inherit = (*spawn_cb) (spawn_cb_arg);
/* Setup return values. */
*pid = (pid_t)INVALID_HANDLE_VALUE;
@@ -663,7 +664,11 @@ _gpgrt_spawn_process_fd (const char *pgmname, const char *argv[],
/* Prepare security attributes. */
memset (&sec_attr, 0, sizeof sec_attr );
sec_attr.nLength = sizeof sec_attr;
- sec_attr.bInheritHandle = FALSE;
+
+ if (ask_inherit)
+ sec_attr.bInheritHandle = TRUE;
+ else
+ sec_attr.bInheritHandle = FALSE;
/* Build the command line. */
err = build_w32_commandline (pgmname, argv, &cmdline);
@@ -926,3 +931,10 @@ _gpgrt_release_process (pid_t pid)
CloseHandle (process);
}
}
+
+void
+_gpgrt_close_all_fds (int from, int *keep_fds)
+{
+ (void)from;
+ (void)keep_fds;
+}