summaryrefslogtreecommitdiff
path: root/lib/libc/signal/sigismember.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc/signal/sigismember.c')
-rw-r--r--lib/libc/signal/sigismember.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/libc/signal/sigismember.c b/lib/libc/signal/sigismember.c
new file mode 100644
index 00000000..8adf5fab
--- /dev/null
+++ b/lib/libc/signal/sigismember.c
@@ -0,0 +1,18 @@
+#include <asm-generic/signal.h>
+
+typedef __UINT64_TYPE__ __sigset_t;
+
+#define __sigmask(sig) (((__sigset_t)1) << ((sig) - 1))
+#define __sigismember(set, sig) \
+ (__extension__({ \
+ __sigset_t __mask = __sigmask(sig); \
+ *(set) & __mask ? 1 : 0; \
+ }))
+
+int sigismember(const __sigset_t *set, int signo)
+{
+ if (signo < 1 || signo > _NSIG)
+ return -1;
+
+ return __sigismember((const __sigset_t *)set, signo);
+}