diff options
-rw-r--r-- | include/sys/wait.h | 5 | ||||
-rw-r--r-- | libc/stdlib/system.c | 2 | ||||
-rw-r--r-- | libc/sysdeps/linux/common/wait3.c | 16 | ||||
-rw-r--r-- | libc/sysdeps/linux/common/wait4.c | 16 |
4 files changed, 16 insertions, 23 deletions
diff --git a/include/sys/wait.h b/include/sys/wait.h index 4beb3e239..b09c28ddf 100644 --- a/include/sys/wait.h +++ b/include/sys/wait.h @@ -171,9 +171,12 @@ extern __pid_t wait3 (__WAIT_STATUS __stat_loc, int __options, /* PID is like waitpid. Other args are like wait3. */ extern __pid_t wait4 (__pid_t __pid, __WAIT_STATUS __stat_loc, int __options, struct rusage *__usage) __THROW; -libc_hidden_proto(wait4) #endif /* Use BSD. */ +#ifdef _LIBC +extern __pid_t __wait4_nocancel(__pid_t, __WAIT_STATUS, int, struct rusage *) attribute_hidden; +#endif + __END_DECLS diff --git a/libc/stdlib/system.c b/libc/stdlib/system.c index ec25ead73..151a229c6 100644 --- a/libc/stdlib/system.c +++ b/libc/stdlib/system.c @@ -61,7 +61,7 @@ int __libc_system(const char *command) __printf("Waiting for child %d\n", pid); #endif - if (wait4(pid, &wait_val, 0, 0) == -1) + if (__wait4_nocancel(pid, &wait_val, 0, 0) == -1) wait_val = -1; out: diff --git a/libc/sysdeps/linux/common/wait3.c b/libc/sysdeps/linux/common/wait3.c index 0d480ec54..a4391fd18 100644 --- a/libc/sysdeps/linux/common/wait3.c +++ b/libc/sysdeps/linux/common/wait3.c @@ -5,20 +5,12 @@ */ #include <sys/syscall.h> -#include <sys/types.h> -#include <sys/wait.h> -#include <sys/resource.h> -#if defined __USE_BSD +#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED +# include <sys/wait.h> - -/* Wait for a child to exit. When one does, put its status in *STAT_LOC and - * return its process ID. For errors return (pid_t) -1. If USAGE is not nil, - * store information about the child's resource usage (as a `struct rusage') - * there. If the WUNTRACED bit is set in OPTIONS, return status for stopped - * children; otherwise don't. */ -pid_t wait3 (__WAIT_STATUS stat_loc, int options, struct rusage * usage) +pid_t wait3(__WAIT_STATUS stat_loc, int options, struct rusage *usage) { - return wait4 (WAIT_ANY, stat_loc, options, usage); + return __wait4_nocancel(WAIT_ANY, stat_loc, options, usage); } #endif diff --git a/libc/sysdeps/linux/common/wait4.c b/libc/sysdeps/linux/common/wait4.c index dceab41b6..b7952ad81 100644 --- a/libc/sysdeps/linux/common/wait4.c +++ b/libc/sysdeps/linux/common/wait4.c @@ -8,18 +8,16 @@ */ #include <sys/syscall.h> -#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED #include <sys/wait.h> -#include <sys/resource.h> +# define __NR___syscall_wait4 __NR_wait4 +static __always_inline _syscall4(int, __syscall_wait4, __kernel_pid_t, pid, + int *, status, int, opts, struct rusage *, rusage) -#define __NR___syscall_wait4 __NR_wait4 -static __inline__ _syscall4(int, __syscall_wait4, __kernel_pid_t, pid, - int *, status, int, opts, struct rusage *, rusage) - -pid_t wait4(pid_t pid, int *status, int opts, struct rusage *rusage) +pid_t __wait4_nocancel(pid_t pid, int *status, int opts, struct rusage *rusage) { - return (__syscall_wait4(pid, status, opts, rusage)); + return __syscall_wait4(pid, status, opts, rusage); } -libc_hidden_def(wait4) +#ifdef __USE_BSD +strong_alias(__wait4_nocancel,wait4) #endif |