Index: fusl/src/thread/pthread_sigmask.c |
diff --git a/fusl/src/thread/pthread_sigmask.c b/fusl/src/thread/pthread_sigmask.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..88c333f6b682b0c3db71fc35b5e7ed69636272a4 |
--- /dev/null |
+++ b/fusl/src/thread/pthread_sigmask.c |
@@ -0,0 +1,19 @@ |
+#include <signal.h> |
+#include <errno.h> |
+#include "syscall.h" |
+ |
+int pthread_sigmask(int how, const sigset_t *restrict set, sigset_t *restrict old) |
+{ |
+ int ret; |
+ if ((unsigned)how - SIG_BLOCK > 2U) return EINVAL; |
+ ret = -__syscall(SYS_rt_sigprocmask, how, set, old, _NSIG/8); |
+ if (!ret && old) { |
+ if (sizeof old->__bits[0] == 8) { |
+ old->__bits[0] &= ~0x380000000ULL; |
+ } else { |
+ old->__bits[0] &= ~0x80000000UL; |
+ old->__bits[1] &= ~0x3UL; |
+ } |
+ } |
+ return ret; |
+} |