OSDN Git Service

hidden_def/hidden_proto: convert all users (I hope) termios split, add some missing...
[uclinux-h8/uClibc.git] / libc / sysdeps / linux / common / sigprocmask.c
1 /* vi: set sw=4 ts=4: */
2 /*
3  * sigprocmask() for uClibc
4  *
5  * Copyright (C) 2000-2004 by Erik Andersen <andersen@codepoet.org>
6  *
7  * GNU Library General Public License (LGPL) version 2 or later.
8  */
9
10 #include "syscalls.h"
11 #include <signal.h>
12
13 #undef sigprocmask
14
15 #ifdef __NR_rt_sigprocmask
16
17 #define __NR___rt_sigprocmask __NR_rt_sigprocmask
18 static inline
19 _syscall4(int, __rt_sigprocmask, int, how, const sigset_t *, set,
20                   sigset_t *, oldset, size_t, size);
21
22 int sigprocmask(int how, const sigset_t * set, sigset_t * oldset)
23 {
24         if (set &&
25 #if (SIG_BLOCK == 0) && (SIG_UNBLOCK == 1) && (SIG_SETMASK == 2)
26                 (((unsigned int) how) > 2)
27 #else
28 #warning "compile time assumption violated.. slow path..."
29                 ((how != SIG_BLOCK) && (how != SIG_UNBLOCK)
30                  && (how != SIG_SETMASK))
31 #endif
32                 ) {
33                 __set_errno(EINVAL);
34                 return -1;
35         }
36         return __rt_sigprocmask(how, set, oldset, _NSIG / 8);
37 }
38
39
40 #else
41
42 #define __NR___syscall_sigprocmask __NR_sigprocmask
43 static inline
44 _syscall3(int, __syscall_sigprocmask, int, how, const sigset_t *, set,
45                   sigset_t *, oldset);
46
47 int sigprocmask(int how, const sigset_t * set, sigset_t * oldset)
48 {
49         if (set &&
50 #if (SIG_BLOCK == 0) && (SIG_UNBLOCK == 1) && (SIG_SETMASK == 2)
51                 (((unsigned int) how) > 2)
52 #else
53 #warning "compile time assumption violated.. slow path..."
54                 ((how != SIG_BLOCK) && (how != SIG_UNBLOCK)
55                  && (how != SIG_SETMASK))
56 #endif
57                 ) {
58                 __set_errno(EINVAL);
59                 return -1;
60         }
61         return (__syscall_sigprocmask(how, set, oldset));
62 }
63 #endif
64
65 libc_hidden_proto(sigprocmask)
66 libc_hidden_def(sigprocmask)