Re: [hackers] [sbase][PATCH 3/6] find: Fix spawn() return value

From: Evan Gates <evan.gates_AT_gmail.com>
Date: Mon, 17 Feb 2025 16:30:04 -0700

On Fri, 14 Feb 2025 at 09:25 Tavian Barnes, <tavianator_AT_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
> _AT_@ -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);
> _AT_@ -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
>
>
Received on Tue Feb 18 2025 - 00:30:04 CET

This archive was generated by hypermail 2.3.0 : Tue Feb 18 2025 - 12:12:38 CET