LibC: Make system() behave according to POSIX

- system(nullptr) returns non-zero to indicate the presence of a shell
- Failure to fork() returns -1
- Failure to exec() in the child returns 127
This commit is contained in:
Andreas Kling 2019-09-27 09:42:32 +02:00
parent 676af444ca
commit b009f8522c
Notes: sideshowbarker 2024-07-19 11:59:07 +09:00

View file

@ -263,12 +263,18 @@ void srandom(unsigned seed)
int system(const char* command)
{
if (!command)
return 1;
auto child = fork();
if (child < 0)
return -1;
if (!child) {
int rc = execl("/bin/sh", "sh", "-c", command, nullptr);
if (rc < 0)
perror("execl");
exit(0);
ASSERT(rc < 0);
perror("execl");
exit(127);
}
int wstatus;
waitpid(child, &wstatus, 0);