From: Junio C Hamano Date: Mon, 01 Aug 2011 20:17:28 GMT Subject: Re: [PATCH] notice error exit from pager Message-ID: <7vd3goj38n.fsf@alter.siamese.dyndns.org> In-Reply-To: <20110801175921.GA17092@toss> Clemens Buchacher writes: > Since there is no reliable way to handle error reporting in the > parent, produce the output in the child instead. Hmm, how does this interact with your earlier "error_routine: use parent's stderr if exec fails" patch? > diff --git a/run-command.c b/run-command.c > index 5c91f37..a2796c4 100644 > --- a/run-command.c > +++ b/run-command.c > @@ -125,9 +125,6 @@ static int wait_or_whine(pid_t pid, const char *argv0, int silent_exec_failure) > if (code == 127) { > code = -1; > failed_errno = ENOENT; > - if (!silent_exec_failure) > - error("cannot run %s: %s", argv0, > - strerror(ENOENT)); > } > } else { > error("waitpid is confused (%s)", argv0); > @@ -282,14 +279,14 @@ fail_pipe: > } else { > execvp(cmd->argv[0], (char *const*) cmd->argv); > } > - /* > - * Do not check for cmd->silent_exec_failure; the parent > - * process will check it when it sees this exit code. > - */ > - if (errno == ENOENT) > + if (errno == ENOENT) { > + if (!cmd->silent_exec_failure) > + error("cannot run %s: %s", cmd->argv[0], > + strerror(ENOENT)); > exit(127); > - else > + } else { > die_errno("cannot exec '%s'", cmd->argv[0]); > + } > } > if (cmd->pid < 0) > error("cannot fork() for %s: %s", cmd->argv[0],