add SA_NOMASK alias for SA_NODEFER with _GNU_SOURCE
[musl] / include / signal.h
index 540236a..1b58908 100644 (file)
@@ -5,11 +5,19 @@
 extern "C" {
 #endif
 
+#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
+ || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE)
+
+#ifdef _GNU_SOURCE
+#define __siginfo siginfo
+#endif
+
 #define __NEED_size_t
 #define __NEED_pid_t
 #define __NEED_uid_t
 #define __NEED_struct_timespec
 #define __NEED_pthread_t
+#define __NEED_pthread_attr_t
 #define __NEED_time_t
 #define __NEED_clock_t
 #define __NEED_sigset_t
@@ -17,10 +25,7 @@ extern "C" {
 
 #include <bits/alltypes.h>
 
-typedef int sig_atomic_t;
-
-struct sigaction
-{
+struct sigaction {
        union {
                void (*sa_handler)(int);
                void (*sa_sigaction)(int, siginfo_t *, void *);
@@ -32,20 +37,28 @@ struct sigaction
 #define sa_handler   __sa_handler.sa_handler
 #define sa_sigaction __sa_handler.sa_sigaction
 
-typedef struct
-{
+typedef struct {
        void *ss_sp;
        int ss_flags;
        size_t ss_size;
 } stack_t;
 
-union sigval
-{
+union sigval {
        int sival_int;
        void *sival_ptr;
 };
 
-#include <bits/signal.h>
+struct sigevent {
+       union sigval sigev_value;
+       int sigev_signo;
+       int sigev_notify;
+       void (*sigev_notify_function)(union sigval);
+       pthread_attr_t *sigev_notify_attributes;
+};
+
+#define SIGEV_SIGNAL 0
+#define SIGEV_NONE 1
+#define SIGEV_THREAD 2
 
 int __libc_current_sigrtmin(void);
 int __libc_current_sigrtmax(void);
@@ -53,12 +66,7 @@ int __libc_current_sigrtmax(void);
 #define SIGRTMIN  (__libc_current_sigrtmin())
 #define SIGRTMAX  (__libc_current_sigrtmax())
 
-void (*signal(int, void (*)(int)))(int);
-void (*bsd_signal(int, void (*)(int)))(int);
 int kill(pid_t, int);
-int killpg(pid_t, int);
-int raise(int);
-int sigpause(int);
 
 int sigemptyset(sigset_t *);
 int sigfillset(sigset_t *);
@@ -75,22 +83,35 @@ int sigwaitinfo(const sigset_t *, siginfo_t *);
 int sigtimedwait(const sigset_t *, siginfo_t *, const struct timespec *);
 int sigqueue(pid_t, int, const union sigval);
 
-int siginterrupt(int, int);
+int pthread_sigmask(int, const sigset_t *, sigset_t *);
+int pthread_kill(pthread_t, int);
 
-int sigaltstack(const stack_t *, stack_t *);
+#endif
 
+#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE)
+int killpg(pid_t, int);
+int sigaltstack(const stack_t *, stack_t *);
 int sighold(int);
-int sigrelse(int);
 int sigignore(int);
+int siginterrupt(int, int);
+int sigpause(int);
+int sigrelse(int);
 void (*sigset(int, void (*)(int)))(int);
-
-int pthread_sigmask(int, const sigset_t *, sigset_t *);
-int pthread_kill(pthread_t, int);
+#endif
 
 #ifdef _GNU_SOURCE
-typedef int (*sighandler_t)(int);
+typedef void (*sighandler_t)(int);
+void (*bsd_signal(int, void (*)(int)))(int);
+#define SA_NOMASK SA_NODEFER
 #endif
 
+#include <bits/signal.h>
+
+typedef int sig_atomic_t;
+
+void (*signal(int, void (*)(int)))(int);
+int raise(int);
+
 #ifdef __cplusplus
 }
 #endif