2 * sigprocmask() for uClibc
4 * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
6 * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
9 #include <sys/syscall.h>
11 #if defined __USE_POSIX
13 #ifdef __UCLIBC_HAS_THREADS_NATIVE__
14 # include <pthreadP.h> /* SIGCANCEL */
19 libc_hidden_proto(sigprocmask
)
21 #ifdef __NR_rt_sigprocmask
23 # define __NR___rt_sigprocmask __NR_rt_sigprocmask
24 static __always_inline
25 _syscall4(int, __rt_sigprocmask
, int, how
, const sigset_t
*, set
,
26 sigset_t
*, oldset
, size_t, size
)
28 int sigprocmask(int how
, const sigset_t
* set
, sigset_t
* oldset
)
31 sigset_t local_newmask
;
34 * The only thing we have to make sure here is that SIGCANCEL and
35 * SIGSETXID are not blocked.
37 if (set
!= NULL
&& (unlikely (__sigismember (set
, SIGCANCEL
))
39 || unlikely (__sigismember (set
, SIGSETXID
))
44 __sigdelset (&local_newmask
, SIGCANCEL
);
46 __sigdelset (&local_newmask
, SIGSETXID
);
52 return __rt_sigprocmask(how
, set
, oldset
, __SYSCALL_SIGSET_T_SIZE
);
58 # define __NR___syscall_sigprocmask __NR_sigprocmask
59 static __always_inline
60 _syscall3(int, __syscall_sigprocmask
, int, how
, const sigset_t
*, set
,
63 int sigprocmask(int how
, const sigset_t
* set
, sigset_t
* oldset
)
66 sigset_t local_newmask
;
69 * The only thing we have to make sure here is that SIGCANCEL and
70 * SIGSETXID are not blocked.
72 if (set
!= NULL
&& (unlikely (__sigismember (set
, SIGCANCEL
))
74 || unlikely (__sigismember (set
, SIGSETXID
))
79 __sigdelset (&local_newmask
, SIGCANCEL
);
81 __sigdelset (&local_newmask
, SIGSETXID
);
87 return (__syscall_sigprocmask(how
, set
, oldset
));
90 libc_hidden_def(sigprocmask
)