From cf81dbc6e2713fa0ac1a7ccbd27d716095afb3f1 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Tue, 1 Dec 2020 03:59:57 +0100 Subject: [PATCH] execute: Fix uninitialized use of errno. * lib/execute.c (execute): Preserve errno across several system calls. --- ChangeLog | 5 +++++ lib/execute.c | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index b08614eb26..41c85c01c9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2020-11-30 Bruno Haible + + execute: Fix uninitialized use of errno. + * lib/execute.c (execute): Preserve errno across several system calls. + 2020-11-30 Bruno Haible access tests: Fix test failure on native Windows. diff --git a/lib/execute.c b/lib/execute.c index 149cc89454..15556cf791 100644 --- a/lib/execute.c +++ b/lib/execute.c @@ -103,6 +103,8 @@ execute (const char *progname, /* Native Windows API. */ + int saved_errno; + /* FIXME: Need to free memory allocated by prepare_spawn. */ prog_argv = prepare_spawn (prog_argv); @@ -144,6 +146,8 @@ execute (const char *progname, stdin_handle, stdout_handle, stderr_handle); } } + if (exitcode == -1) + saved_errno = errno; if (nulloutfd >= 0) close (nulloutfd); if (nullinfd >= 0) @@ -155,7 +159,7 @@ execute (const char *progname, if (exitcode == -1) { if (exit_on_error || !null_stderr) - error (exit_on_error ? EXIT_FAILURE : 0, errno, + error (exit_on_error ? EXIT_FAILURE : 0, saved_errno, _("%s subprocess failed"), progname); return 127; } -- 2.39.5