Hi, Quoth Evan Gates <evan.ga...@gmail.com>: > 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
Indeed, I think this change is not needed. > > 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? > > > } Indeed. The WIFEXITED and WEXITSTATUS are only required in other cases where you care about the error reason, but for success you don't need them. Kind regards,