diff options
author | Werner Koch <[email protected]> | 2024-06-05 08:31:21 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2024-06-05 08:31:21 +0000 |
commit | 60b9a68def583d7c3a1d47daec717a7f71233c55 (patch) | |
tree | 2f2e9ec0ba9bab3d1d33fd8353d60d740539ee3f | |
parent | spawn: Expose spawn functions API. (diff) | |
download | libgpg-error-60b9a68def583d7c3a1d47daec717a7f71233c55.tar.gz libgpg-error-60b9a68def583d7c3a1d47daec717a7f71233c55.zip |
spawn: Avoid bumping the error counter.
* src/spawn-posix.c: Use log_info instead of log_error.
* src/spawn-w32.c: Ditto.
(spawn_detached): Fix copying of hd[2]
(_gpgrt_process_spawn): Ditto.
--
The spawn function might be used to run helper processes which are
non-critical for the operation of the program. For example to display
help. Bumping the error counter via gpgrt_log_error would then let
the entire program fail which might be surprising. It is better to
just print an informational message and let the caller decide what to
do with the returned error code.
-rw-r--r-- | src/spawn-posix.c | 12 | ||||
-rw-r--r-- | src/spawn-w32.c | 30 |
2 files changed, 22 insertions, 20 deletions
diff --git a/src/spawn-posix.c b/src/spawn-posix.c index 67a118f..e06cb48 100644 --- a/src/spawn-posix.c +++ b/src/spawn-posix.c @@ -217,7 +217,7 @@ do_create_pipe_and_estream (int filedes[2], estream_t *r_fp, if (pipe (filedes) == -1) { err = _gpg_err_code_from_syserror (); - _gpgrt_log_error (_("error creating a pipe: %s\n"), _gpg_strerror (err)); + _gpgrt_log_info (_("error creating a pipe: %s\n"), _gpg_strerror (err)); filedes[0] = filedes[1] = -1; *r_fp = NULL; return err; @@ -231,7 +231,7 @@ do_create_pipe_and_estream (int filedes[2], estream_t *r_fp, if (!*r_fp) { err = _gpg_err_code_from_syserror (); - _gpgrt_log_error (_("error creating a stream for a pipe: %s\n"), + _gpgrt_log_info (_("error creating a stream for a pipe: %s\n"), _gpg_strerror (err)); close (filedes[0]); close (filedes[1]); @@ -361,7 +361,7 @@ spawn_detached (const char *pgmname, const char *argv[], if (pid == (pid_t)(-1)) { ec = _gpg_err_code_from_syserror (); - _gpgrt_log_error (_("error forking process: %s\n"), _gpg_strerror (ec)); + _gpgrt_log_info (_("error forking process: %s\n"), _gpg_strerror (ec)); xfree (argv); return ec; } @@ -388,7 +388,7 @@ spawn_detached (const char *pgmname, const char *argv[], { _gpgrt_post_syscall (); ec = _gpg_err_code_from_syserror (); - _gpgrt_log_error ("waitpid failed in gpgrt_spawn_process_detached: %s", + _gpgrt_log_info ("waitpid failed in gpgrt_spawn_process_detached: %s", _gpg_strerror (ec)); return ec; } @@ -636,7 +636,7 @@ _gpgrt_process_spawn (const char *pgmname, const char *argv1[], if (pid == (pid_t)(-1)) { ec = _gpg_err_code_from_syserror (); - _gpgrt_log_error (_("error forking process: %s\n"), _gpg_strerror (ec)); + _gpgrt_log_info (_("error forking process: %s\n"), _gpg_strerror (ec)); if (fd_in[0] >= 0 && fd_in[0] != 0) close (fd_in[0]); if (fd_in[1] >= 0) @@ -889,7 +889,7 @@ _gpgrt_process_wait (gpgrt_process_t process, int hang) if (pid == (pid_t)(-1)) { ec = _gpg_err_code_from_syserror (); - _gpgrt_log_error (_("waiting for process %d to terminate failed: %s\n"), + _gpgrt_log_info (_("waiting for process %d to terminate failed: %s\n"), (int)pid, _gpg_strerror (ec)); } else if (!pid) diff --git a/src/spawn-w32.c b/src/spawn-w32.c index 4e0f206..c3a79d6 100644 --- a/src/spawn-w32.c +++ b/src/spawn-w32.c @@ -194,7 +194,7 @@ create_inheritable_pipe (HANDLE filedes[2], int flags) return 0; fail: - _gpgrt_log_error ("SetHandleInformation failed: ec=%d\n", + _gpgrt_log_info ("SetHandleInformation failed: ec=%d\n", (int)GetLastError ()); CloseHandle (r); CloseHandle (w); @@ -240,7 +240,7 @@ do_create_pipe_and_estream (int filedes[2], filedes[0] = _open_osfhandle (handle_to_fd (fds[0]), O_RDONLY); if (filedes[0] == -1) { - _gpgrt_log_error ("failed to translate osfhandle %p\n", fds[0]); + _gpgrt_log_info ("failed to translate osfhandle %p\n", fds[0]); CloseHandle (fds[1]); } else @@ -248,7 +248,7 @@ do_create_pipe_and_estream (int filedes[2], filedes[1] = _open_osfhandle (handle_to_fd (fds[1]), O_APPEND); if (filedes[1] == -1) { - _gpgrt_log_error ("failed to translate osfhandle %p\n", fds[1]); + _gpgrt_log_info ("failed to translate osfhandle %p\n", fds[1]); close (filedes[0]); filedes[0] = -1; CloseHandle (fds[1]); @@ -274,7 +274,7 @@ do_create_pipe_and_estream (int filedes[2], if (!*r_fp) { err = _gpg_err_code_from_syserror (); - _gpgrt_log_error (_("error creating a stream for a pipe: %s\n"), + _gpgrt_log_info (_("error creating a stream for a pipe: %s\n"), _gpg_strerror (err)); close (filedes[0]); close (filedes[1]); @@ -384,7 +384,7 @@ spawn_detached (const char *pgmname, char *cmdline, gpgrt_spawn_actions_t act) hd[j++] = act->hd[0]; if (act->hd[1] != INVALID_HANDLE_VALUE) hd[j++] = act->hd[1]; - if (act->hd[1] != INVALID_HANDLE_VALUE) + if (act->hd[2] != INVALID_HANDLE_VALUE) hd[j++] = act->hd[2]; if (hd_p) { @@ -393,7 +393,7 @@ spawn_detached (const char *pgmname, char *cmdline, gpgrt_spawn_actions_t act) hd[j++] = *hd_p++; else { - _gpgrt_log_error ("Too much handles\n"); + _gpgrt_log_info ("gpgrt_spawn_detached: too many handles\n"); break; } } @@ -458,10 +458,12 @@ spawn_detached (const char *pgmname, char *cmdline, gpgrt_spawn_actions_t act) if (!ret) { if (!wpgmname || !wcmdline) - _gpgrt_log_error ("CreateProcess failed (utf8_to_wchar): %s\n", + _gpgrt_log_info ("gpgrt_spawn_detached: " + "CreateProcess failed (utf8_to_wchar): %s\n", strerror (errno)); else - _gpgrt_log_error ("CreateProcess(detached) failed: %d\n", + _gpgrt_log_info ("gpgrt_spawn_detached: " + "CreateProcess(detached) failed: %d\n", (int)GetLastError ()); xfree (wpgmname); xfree (wcmdline); @@ -716,7 +718,7 @@ _gpgrt_process_spawn (const char *pgmname, const char *argv[], hd[j++] = act->hd[0]; if (act->hd[1] != INVALID_HANDLE_VALUE) hd[j++] = act->hd[1]; - if (act->hd[1] != INVALID_HANDLE_VALUE) + if (act->hd[2] != INVALID_HANDLE_VALUE) hd[j++] = act->hd[2]; if (hd_p) { @@ -725,7 +727,7 @@ _gpgrt_process_spawn (const char *pgmname, const char *argv[], hd[j++] = *hd_p++; else { - _gpgrt_log_error ("Too much handles\n"); + _gpgrt_log_info ("gpgrt_process_spawn: too many handles\n"); break; } } @@ -804,10 +806,10 @@ _gpgrt_process_spawn (const char *pgmname, const char *argv[], if (!ret) { if (!wpgmname || !wcmdline) - _gpgrt_log_error ("CreateProcess failed (utf8_to_wchar): %s\n", + _gpgrt_log_info ("CreateProcess failed (utf8_to_wchar): %s\n", strerror (errno)); else - _gpgrt_log_error ("CreateProcess failed: ec=%d\n", + _gpgrt_log_info ("CreateProcess failed: ec=%d\n", (int)GetLastError ()); if ((flags & GPGRT_PROCESS_STDIN_PIPE) || !(flags & GPGRT_PROCESS_STDIN_KEEP)) @@ -1086,8 +1088,8 @@ _gpgrt_process_wait (gpgrt_process_t process, int hang) break; case WAIT_FAILED: - _gpgrt_log_error (_("waiting for process to terminate failed: ec=%d\n"), - (int)GetLastError ()); + _gpgrt_log_info (_("waiting for process to terminate failed: ec=%d\n"), + (int)GetLastError ()); ec = GPG_ERR_GENERAL; break; |