adjust sys/wait.h not to produde errors in strict ISO C feature profile

siginfo_t is not available from signal.h when the strict ISO C feature
profile (e.g. passing -std=c99 to gcc without defining any other
feature test macros) is used, but the type is needed to declare
waitid. using sys/wait.h (or any POSIX headers) in strict ISO C mode
is an application bug, but in the interest of compatibility, it's best
to avoid producing gratuitous errors. the simplest fix I could find is
suppressing the declaration of waitid (and also signal.h inclusion,
since it's not needed for anything else) in this case, while still
exposing everything else in sys/wait.h
This commit is contained in:
Rich Felker 2013-11-09 00:04:02 -05:00
parent 41a9ba25cd
commit f5980e330a
1 changed files with 7 additions and 3 deletions

View File

@ -6,8 +6,6 @@ extern "C" {
#include <features.h> #include <features.h>
#include <signal.h>
#define __NEED_pid_t #define __NEED_pid_t
#define __NEED_id_t #define __NEED_id_t
#include <bits/alltypes.h> #include <bits/alltypes.h>
@ -19,9 +17,15 @@ typedef enum {
} idtype_t; } idtype_t;
pid_t wait (int *); pid_t wait (int *);
int waitid (idtype_t, id_t, siginfo_t *, int);
pid_t waitpid (pid_t, int *, int ); pid_t waitpid (pid_t, int *, int );
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
|| defined(_BSD_SOURCE)
#include <signal.h>
int waitid (idtype_t, id_t, siginfo_t *, int);
#endif
#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
#include <sys/resource.h> #include <sys/resource.h>
pid_t wait3 (int *, int, struct rusage *); pid_t wait3 (int *, int, struct rusage *);