aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/posix/system.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/posix/system.c')
-rw-r--r--sysdeps/posix/system.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/sysdeps/posix/system.c b/sysdeps/posix/system.c
index 01e8bc4..2c33569 100644
--- a/sysdeps/posix/system.c
+++ b/sysdeps/posix/system.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-2024 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2025 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -144,7 +144,7 @@ do_system (const char *line)
__posix_spawnattr_setflags (&spawn_attr,
POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK);
- ret = __posix_spawn (&pid, SHELL_PATH, 0, &spawn_attr,
+ ret = __posix_spawn (&pid, SHELL_PATH, NULL, &spawn_attr,
(char *const[]){ (char *) SHELL_NAME,
(char *) "-c",
(char *) "--",
@@ -175,10 +175,14 @@ do_system (const char *line)
__libc_cleanup_region_end (0);
#endif
}
+ else if (ret == EAGAIN || ret == ENOMEM)
+ /* POSIX states that failure to create a child process should
+ return -1. */
+ status = -1;
else
- /* POSIX states that failure to execute the shell should return
- as if the shell had terminated using _exit(127). */
- status = W_EXITCODE (127, 0);
+ /* POSIX states that failure to execute the shell should return
+ as if the shell had terminated using _exit(127). */
+ status = W_EXITCODE (127, 0);
/* sigaction can not fail with SIGINT/SIGQUIT used with old
disposition. Same applies for sigprocmask. */