a272c10d301df8fef5b9ea58f7b1a41d96a7130c
[musl] / src / signal / sigprocmask.c
1 #include <signal.h>
2 #include <errno.h>
3 #include "syscall.h"
4 #include "libc.h"
5 #include "pthread_impl.h"
6
7 int __libc_sigprocmask(int how, const sigset_t *set, sigset_t *old)
8 {
9         return syscall(SYS_rt_sigprocmask, how, set, old, 8);
10 }
11
12 int __sigprocmask(int how, const sigset_t *set, sigset_t *old)
13 {
14         sigset_t tmp;
15         if (how > 2U) {
16                 errno = EINVAL;
17                 return -1;
18         }
19         /* Disallow blocking thread control signals */
20         if (set && how != SIG_UNBLOCK) {
21                 tmp = *set;
22                 set = &tmp;
23                 sigdelset(&tmp, SIGCANCEL);
24                 sigdelset(&tmp, SIGSYSCALL);
25                 sigdelset(&tmp, SIGTIMER);
26         }
27         return __libc_sigprocmask(how, set, old);
28 }
29
30 weak_alias(__sigprocmask, sigprocmask);