On Fri, 14 Feb 2025 at 09:25 Tavian Barnes, <taviana...@tavianator.com> wrote:
> --- > find.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/find.c b/find.c > index ce551e5..71488da 100644 > --- a/find.c > +++ b/find.c > @@ -244,6 +244,7 @@ spawn(char *argv[]) > switch((pid = fork())) { > case -1: > eprintf("fork:"); > + return -1; eprintf calls exit(1), there's no return to do here > case 0: > execvp(*argv, argv); > weprintf("exec %s failed:", *argv); > @@ -252,7 +253,7 @@ spawn(char *argv[]) > > /* FIXME: proper course of action for waitpid() on EINTR? */ > waitpid(pid, &status, 0); > - return status; > + return WIFEXITED(status) && WEXITSTATUS(status) == 0 ? 0 : -1; >From POSIX wait() documention: The value stored at the location pointed to by stat_loc shall be 0 if and only if the status returned is from a terminated child process that terminated by one of the following means: 1. The process returned 0 from main(). 2. The process called _exit() or exit() with a status argument of 0. 3. The process was terminated because the last thread in the process terminated. Why do extra work if we already have 0 status on success? > } > > static int > -- > 2.48.1 > >