about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--include/bits/signal.h14
-rw-r--r--include/signal.h32
-rw-r--r--src/signal/bsd_signal.c6
-rw-r--r--src/signal/signal.c3
4 files changed, 33 insertions, 22 deletions
diff --git a/include/bits/signal.h b/include/bits/signal.h
index c0bb818b..8827efda 100644
--- a/include/bits/signal.h
+++ b/include/bits/signal.h
@@ -1,3 +1,6 @@
+#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
+ || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE)
+
 struct __siginfo
 {
 	int si_signo;
@@ -57,12 +60,17 @@ struct __siginfo
 #define SIG_UNBLOCK   1
 #define SIG_SETMASK   2
 
-#define SIG_ERR  ((void (*)(int))-1)
-#define SIG_DFL  ((void (*)(int)) 0)
-#define SIG_IGN  ((void (*)(int)) 1)
 #define SIG_HOLD ((void (*)(int)) 2)
 
+#endif
+
+#ifdef _GNU_SOURCE
 #define NSIG      64
+#endif
+
+#define SIG_ERR  ((void (*)(int))-1)
+#define SIG_DFL  ((void (*)(int)) 0)
+#define SIG_IGN  ((void (*)(int)) 1)
 
 #define SIGHUP    1
 #define SIGINT    2
diff --git a/include/signal.h b/include/signal.h
index 540236a5..d69419e3 100644
--- a/include/signal.h
+++ b/include/signal.h
@@ -5,6 +5,9 @@
 extern "C" {
 #endif
 
+#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
+ || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE)
+
 #define __NEED_size_t
 #define __NEED_pid_t
 #define __NEED_uid_t
@@ -17,8 +20,6 @@ extern "C" {
 
 #include <bits/alltypes.h>
 
-typedef int sig_atomic_t;
-
 struct sigaction
 {
 	union {
@@ -53,12 +54,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 +71,32 @@ 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);
+void (*bsd_signal(int, void (*)(int)))(int);
 #endif
 
+typedef int sig_atomic_t;
+
+void (*signal(int, void (*)(int)))(int);
+int raise(int);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/src/signal/bsd_signal.c b/src/signal/bsd_signal.c
deleted file mode 100644
index 0b9a6855..00000000
--- a/src/signal/bsd_signal.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <signal.h>
-
-void (*bsd_signal(int sig, void (*func)(int)))(int)
-{
-	return signal(sig, func);
-}
diff --git a/src/signal/signal.c b/src/signal/signal.c
index 08902760..07346a8a 100644
--- a/src/signal/signal.c
+++ b/src/signal/signal.c
@@ -1,6 +1,7 @@
 #include <signal.h>
 #include <stddef.h>
 #include "syscall.h"
+#include "libc.h"
 
 int __sigaction(int, const struct sigaction *, struct sigaction *);
 
@@ -11,3 +12,5 @@ void (*signal(int sig, void (*func)(int)))(int)
 		return SIG_ERR;
 	return sa.sa_handler;
 }
+
+weak_alias(signal, bsd_signal);