From a92060fe161073a41a3b73e8533d65125f84e3a8 Mon Sep 17 00:00:00 2001 From: "Peter S. Mazinger" Date: Sun, 17 Apr 2011 15:45:46 +0200 Subject: wait4.c: provide hidden __wait4_nocancel independent of any guards Correct wait4 guard (it is only __USE_BSD) wait3, system: use __wait4_nocancel Signed-off-by: Peter S. Mazinger Signed-off-by: Bernhard Reutner-Fischer --- include/sys/wait.h | 5 ++++- libc/stdlib/system.c | 2 +- libc/sysdeps/linux/common/wait3.c | 16 ++++------------ 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 -#include -#include -#include -#if defined __USE_BSD +#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED +# include - -/* 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 -#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED #include -#include +# 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 -- cgit v1.2.3