mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
common: Allow a second input stream for gnupg_exec_tool_stream.
* common/exechelp-posix.c (do_exec): Add arg 'except' and pass to close_all_fds. (gnupg_spawn_process): Add arg 'except'. Change callers to pass NULL for it. * common/exechelp-w32.c (gnupg_spawn_process): Add dummy arg 'except'. * common/exechelp-w32ce.c (gnupg_spawn_process): Ditto. * common/exectool.c (copy_buffer_do_copy): Allow NULL for SINK. (gnupg_exec_tool_stream): Add arg 'inextra'. Change callers to pass NULL for it. Allow NULL for OUTPUT. -- This hack is a first step to allow calling gpg for verification of signatures. Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
e6d9a2d07e
commit
44a32455c8
10 changed files with 124 additions and 36 deletions
|
@ -278,7 +278,7 @@ get_all_open_fds (void)
|
|||
static void
|
||||
do_exec (const char *pgmname, const char *argv[],
|
||||
int fd_in, int fd_out, int fd_err,
|
||||
void (*preexec)(void) )
|
||||
int *except, void (*preexec)(void) )
|
||||
{
|
||||
char **arg_list;
|
||||
int i, j;
|
||||
|
@ -324,7 +324,7 @@ do_exec (const char *pgmname, const char *argv[],
|
|||
}
|
||||
|
||||
/* Close all other files. */
|
||||
close_all_fds (3, NULL);
|
||||
close_all_fds (3, except);
|
||||
|
||||
if (preexec)
|
||||
preexec ();
|
||||
|
@ -420,7 +420,7 @@ gnupg_create_pipe (int filedes[2])
|
|||
/* Fork and exec the PGMNAME, see exechelp.h for details. */
|
||||
gpg_error_t
|
||||
gnupg_spawn_process (const char *pgmname, const char *argv[],
|
||||
void (*preexec)(void), unsigned int flags,
|
||||
int *except, void (*preexec)(void), unsigned int flags,
|
||||
estream_t *r_infp,
|
||||
estream_t *r_outfp,
|
||||
estream_t *r_errfp,
|
||||
|
@ -525,7 +525,8 @@ gnupg_spawn_process (const char *pgmname, const char *argv[],
|
|||
gcry_control (GCRYCTL_TERM_SECMEM);
|
||||
es_fclose (outfp);
|
||||
es_fclose (errfp);
|
||||
do_exec (pgmname, argv, inpipe[0], outpipe[1], errpipe[1], preexec);
|
||||
do_exec (pgmname, argv, inpipe[0], outpipe[1], errpipe[1],
|
||||
except, preexec);
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
|
@ -575,7 +576,7 @@ gnupg_spawn_process_fd (const char *pgmname, const char *argv[],
|
|||
{
|
||||
gcry_control (GCRYCTL_TERM_SECMEM);
|
||||
/* Run child. */
|
||||
do_exec (pgmname, argv, infd, outfd, errfd, NULL);
|
||||
do_exec (pgmname, argv, infd, outfd, errfd, NULL, NULL);
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
|
@ -728,7 +729,7 @@ gnupg_spawn_process_detached (const char *pgmname, const char *argv[],
|
|||
for (i=0; envp[i]; i++)
|
||||
putenv (xstrdup (envp[i]));
|
||||
|
||||
do_exec (pgmname, argv, -1, -1, -1, NULL);
|
||||
do_exec (pgmname, argv, -1, -1, -1, NULL, NULL);
|
||||
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue