aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2024-05-31 06:36:39 +0000
committerNIIBE Yutaka <[email protected]>2024-05-31 06:36:39 +0000
commitfc3fde1bdeb260c92b0a3ea7489536129e9a8a93 (patch)
treed5eb2a841f582211f48dc155f4fd079ea4ead597 /tests
parentcommon: Fix process termination check at release. (diff)
downloadgnupg-fc3fde1bdeb260c92b0a3ea7489536129e9a8a93.tar.gz
gnupg-fc3fde1bdeb260c92b0a3ea7489536129e9a8a93.zip
spawn: Remove spawn callback, introduce gnupg_spawn_actions.
* common/exechelp-posix.c (call_spawn_cb): Remove. (gnupg_spawn_actions_new, gnupg_spawn_actions_release) (gnupg_spawn_actions_set_environ, gnupg_spawn_actions_set_atfork) (gnupg_spawn_actions_set_redirect) (gnupg_spawn_actions_set_inherit_fds): New. (my_exec, spawn_detached): Use spawn actions. (gnupg_spawn_helper): Remove. (gnupg_process_spawn): Remove callback, introduce gnupg_spawn_actions. * common/exechelp-w32.c: Ditto. * common/exechelp.h: Ditto. * agent/genkey.c (do_check_passphrase_pattern): Follow the change of gnupg_process_spawn API. * common/asshelp.c (start_new_service): Likewise. * common/exectool.c (gnupg_exec_tool_stream): Likewise. * common/t-exechelp.c (test_pipe_stream): Likewise. * dirmngr/ldap-wrapper.c (ldap_wrapper): Likewise. * g10/photoid.c (run_with_pipe): Likewise. * scd/app.c (report_change): Likewise. * tests/gpgscm/ffi.c (do_process_spawn_io, do_process_spawn_fd): Likewise. * tools/gpg-card.c (cmd_gpg): Likewise. * tools/gpgconf-comp.c (gpg_agent_runtime_change): Likewise. (scdaemon_runtime_change, tpm2daemon_runtime_change) (dirmngr_runtime_change, keyboxd_runtime_change) (gc_component_launch, gc_component_check_options) (retrieve_options_from_program): Likewise. * tools/gpgconf.c (show_versions_via_dirmngr): Likewise. * tools/gpgtar-create.c (gpgtar_create): Likewise. * tools/gpgtar-extract.c (gpgtar_extract): Likewise. * tools/gpgtar-list.c (gpgtar_list): Likewise. -- Signed-off-by: NIIBE Yutaka <[email protected]>
Diffstat (limited to 'tests')
-rw-r--r--tests/gpgscm/ffi.c53
1 files changed, 31 insertions, 22 deletions
diff --git a/tests/gpgscm/ffi.c b/tests/gpgscm/ffi.c
index 36b0b98d2..510dc4088 100644
--- a/tests/gpgscm/ffi.c
+++ b/tests/gpgscm/ffi.c
@@ -938,7 +938,7 @@ do_process_spawn_io (scheme *sc, pointer args)
}
err = gnupg_process_spawn (argv[0], (const char **) &argv[1],
- flags, NULL, NULL, &proc);
+ flags, NULL, &proc);
err = gnupg_process_get_streams (proc, 0, &infp, NULL, NULL);
err = es_write (infp, a_input, strlen (a_input), NULL);
@@ -1137,25 +1137,6 @@ do_process_spawn_io (scheme *sc, pointer args)
FFI_RETURN_ERR (sc, err);
}
-static void
-setup_std_fds (struct spawn_cb_arg *sca)
-{
- int *std_fds = sca->arg;
-
-#ifdef HAVE_W32_SYSTEM
- sca->hd[0] = std_fds[0] == -1?
- INVALID_HANDLE_VALUE : (HANDLE)_get_osfhandle (std_fds[0]);
- sca->hd[1] = std_fds[1] == -1?
- INVALID_HANDLE_VALUE : (HANDLE)_get_osfhandle (std_fds[1]);
- sca->hd[2] = std_fds[2] == -1?
- INVALID_HANDLE_VALUE : (HANDLE)_get_osfhandle (std_fds[2]);
-#else
- sca->fds[0] = std_fds[0];
- sca->fds[1] = std_fds[1];
- sca->fds[2] = std_fds[2];
-#endif
-}
-
static pointer
do_process_spawn_fd (scheme *sc, pointer args)
{
@@ -1165,6 +1146,7 @@ do_process_spawn_fd (scheme *sc, pointer args)
size_t len;
int std_fds[3];
gnupg_process_t proc = NULL;
+ gnupg_spawn_actions_t act = NULL;
FFI_ARG_OR_RETURN (sc, pointer, arguments, list, args);
FFI_ARG_OR_RETURN (sc, int, std_fds[0], number, args);
@@ -1189,8 +1171,35 @@ do_process_spawn_fd (scheme *sc, pointer args)
fprintf (stderr, " (%d %d %d)\n", std_fds[0], std_fds[1], std_fds[2]);
}
- err = gnupg_process_spawn (argv[0], (const char **) &argv[1],
- 0, setup_std_fds, std_fds, &proc);
+ err = gnupg_spawn_actions_new (&act);
+ if (err)
+ {
+ FFI_RETURN_ERR (sc, err);
+ }
+#ifdef HAVE_W32_SYSTEM
+ {
+ HANDLE std_in, std_out, std_err;
+
+ if (std_fds[0] == -1)
+ std_in = INVALID_HANDLE_VALUE;
+ else
+ std_in = (HANDLE)_get_osfhandle (std_fds[0]);
+ if (std_fds[1] == -1)
+ std_out = INVALID_HANDLE_VALUE;
+ else
+ std_out = (HANDLE)_get_osfhandle (std_fds[1]);
+ if (std_fds[2] == -1)
+ std_err = INVALID_HANDLE_VALUE;
+ else
+ std_err = (HANDLE)_get_osfhandle (std_fds[2]);
+
+ gnupg_spawn_actions_set_redirect (act, std_in, std_out, std_err);
+ }
+#else
+ gnupg_spawn_actions_set_redirect (act, std_fds[0], std_fds[1], std_fds[2]);
+#endif
+ err = gnupg_process_spawn (argv[0], (const char **)&argv[1], 0, act, &proc);
+ gnupg_spawn_actions_release (act);
xfree (argv);
FFI_RETURN_POINTER (sc, proc_wrap (sc, proc));
}