fix return value of system on failure to spawn child process
authorRich Felker <dalias@aerifal.cx>
Wed, 29 Aug 2018 00:39:26 +0000 (20:39 -0400)
committerRich Felker <dalias@aerifal.cx>
Wed, 29 Aug 2018 00:39:26 +0000 (20:39 -0400)
the value 0x7f00 (as if by _exit(127)) is specified only for the case
where the child is created but then fails to exec the shell, since
traditional fork+exec implementations do not admit reporting an error
via errno in this case without additional machinery. it's unclear
whether an implementation not subject to this failure mode needs to
emulate it; one could read the standard as requiring that. if so,
additional code will need to be added to map posix_spawn errors into
the form system is expected to return. but for now, returning -1 to
indicate an error is significantly better behavior than always
reporting failures as if the shell failed to exec after fork.

src/process/system.c

index 8cbdda060d0275c7fd6480b2be676b7c25945d3e..9135b815daa37cefae7ec89eaa54db95e5042014 100644 (file)
@@ -14,7 +14,7 @@ int system(const char *cmd)
        pid_t pid;
        sigset_t old, reset;
        struct sigaction sa = { .sa_handler = SIG_IGN }, oldint, oldquit;
-       int status = 0x7f00, ret;
+       int status = -1, ret;
        posix_spawnattr_t attr;
 
        pthread_testcancel();