aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2022-11-25 01:20:25 +0000
committerNIIBE Yutaka <[email protected]>2022-11-25 01:20:25 +0000
commit2227411d779a601b2b5a140bdf59a022c8ec9b96 (patch)
tree60cabf5fe680700dccf7153ed8eb983d784366f5
parenttry to control inherited HANDLE for new Windows. (diff)
downloadgnupg-2227411d779a601b2b5a140bdf59a022c8ec9b96.tar.gz
gnupg-2227411d779a601b2b5a140bdf59a022c8ec9b96.zip
Replace pipe+gnupg_spawn_process_fd by gnupg_process_spawn.
-- Signed-off-by: NIIBE Yutaka <[email protected]>
-rw-r--r--g10/photoid.c39
1 files changed, 21 insertions, 18 deletions
diff --git a/g10/photoid.c b/g10/photoid.c
index 72e6acf7d..e0c8c3b77 100644
--- a/g10/photoid.c
+++ b/g10/photoid.c
@@ -594,34 +594,37 @@ run_with_pipe (struct spawn_info *info, const void *image, u32 len)
" external programs\n"));
return;
#else /* !EXEC_TEMPFILE_ONLY */
- int to[2];
- pid_t pid;
gpg_error_t err;
const char *argv[4];
-
- err = gnupg_create_pipe (to);
- if (err)
- return;
+ gnupg_process_t proc;
fill_command_argv (argv, info->command);
- err = gnupg_spawn_process_fd (argv[0], argv+1, to[0], -1, -1, &pid);
-
- close (to[0]);
-
+ err = gnupg_process_spawn (argv[0], argv+1,
+ (GNUPG_PROCESS_STDIN_PIPE | GNUPG_PROCESS_STDOUT_NULL
+ | GNUPG_PROCESS_STDERR_NULL),
+ NULL, NULL, &proc);
if (err)
- {
- log_error (_("unable to execute shell '%s': %s\n"),
- argv[0], gpg_strerror (err));
- close (to[1]);
- }
+ log_error (_("unable to execute shell '%s': %s\n"),
+ argv[0], gpg_strerror (err));
else
{
- write (to[1], image, len);
- close (to[1]);
+ int fd_in;
- err = gnupg_wait_process (argv[0], pid, 1, NULL);
+ err = gnupg_process_get_fds (proc, 0, &fd_in, NULL, NULL);
+ if (err)
+ log_error ("unable to get pipe connection '%s': %s\n",
+ argv[2], gpg_strerror (err));
+ else
+ {
+ write (fd_in, image, len);
+ close (fd_in);
+ }
+
+ err = gnupg_process_wait (proc, 1);
if (err)
log_error (_("unnatural exit of external program\n"));
+
+ gnupg_process_release (proc);
}
#endif /* !EXEC_TEMPFILE_ONLY */
}