diff options
authorRich Felker <>2013-11-09 00:04:02 -0500
committerRich Felker <>2013-11-09 00:04:02 -0500
commitf5980e330a331b83f99a25c522aae00170dff131 (patch)
parent41a9ba25cd810fb86ad0d6943bf2d5556d91b99e (diff)
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
1 files changed, 7 insertions, 3 deletions
diff --git a/include/sys/wait.h b/include/sys/wait.h
index a7ad7cd1..c794f5d3 100644
--- a/include/sys/wait.h
+++ b/include/sys/wait.h
@@ -6,8 +6,6 @@ extern "C" {
#include <features.h>
-#include <signal.h>
#define __NEED_pid_t
#define __NEED_id_t
#include <bits/alltypes.h>
@@ -19,9 +17,15 @@ typedef enum {
} idtype_t;
pid_t wait (int *);
-int waitid (idtype_t, id_t, siginfo_t *, 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);
#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
#include <sys/resource.h>
pid_t wait3 (int *, int, struct rusage *);