1 /*
2 * Copyright 2011, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5 #ifndef _LIBROOT_SIGNAL_PRIVATE_H
6 #define _LIBROOT_SIGNAL_PRIVATE_H
7
8
9 #include <signal.h>
10 #include <sys/cdefs.h>
11
12 #include <signal_defs.h>
13
14
15 #define MAX_SIGNAL_NUMBER_BEOS 29
16
17
18 typedef __haiku_int32 sigset_t_beos;
19
20 struct sigaction_beos {
21 __sighandler_t sa_handler;
22 sigset_t_beos sa_mask;
23 int sa_flags;
24 void* sa_userdata;
25 };
26
27
28 static inline sigset_t_beos
to_beos_sigset(sigset_t set)29 to_beos_sigset(sigset_t set)
30 {
31 // restrict to BeOS signals
32 sigset_t_beos beosSet = (sigset_t_beos)(set
33 & SIGNAL_RANGE_TO_MASK(1, MAX_SIGNAL_NUMBER_BEOS));
34
35 // if SIGBUS is set, set SIGSEGV, since they have the same number in BeOS
36 if ((set & SIGNAL_TO_MASK(SIGBUS)) != 0)
37 beosSet |= SIGNAL_TO_MASK(SIGSEGV);
38
39 return beosSet;
40 }
41
42
43 static inline sigset_t
from_beos_sigset(sigset_t_beos beosSet)44 from_beos_sigset(sigset_t_beos beosSet)
45 {
46 sigset_t set = beosSet;
47
48 // if SIGSEGV is set, set SIGBUS, since they have the same number in BeOS
49 if ((set & SIGNAL_TO_MASK(SIGSEGV)) != 0)
50 set |= SIGNAL_TO_MASK(SIGBUS);
51
52 return set;
53 }
54
55
56 __BEGIN_DECLS
57
58
59 __sighandler_t __signal_beos(int signal, __sighandler_t signalHandler);
60 __sighandler_t __signal(int signal, __sighandler_t signalHandler);
61
62 int __sigaction_beos(int signal, const struct sigaction_beos* beosAction,
63 struct sigaction_beos* beosOldAction);
64 int __sigaction(int signal, const struct sigaction* action,
65 struct sigaction* oldAction);
66
67 __sighandler_t __sigset_beos(int signal, __sighandler_t signalHandler);
68 __sighandler_t __sigset(int signal, __sighandler_t signalHandler);
69
70 int __sigignore_beos(int signal);
71 int __sigignore(int signal);
72
73 int __sighold_beos(int signal);
74 int __sighold(int signal);
75
76 int __sigrelse_beos(int signal);
77 int __sigrelse(int signal);
78
79 int __sigpause_beos(int signal);
80 int __sigpause(int signal);
81
82 int __siginterrupt_beos(int signal, int flag);
83 int __siginterrupt(int signal, int flag);
84
85 int __pthread_sigmask_beos(int how, const sigset_t_beos* beosSet,
86 sigset_t_beos* beosOldSet);
87 int __sigprocmask_beos(int how, const sigset_t_beos* beosSet,
88 sigset_t_beos* beosOldSet);
89
90 int __pthread_sigmask(int how, const sigset_t* set, sigset_t* oldSet);
91 int __sigprocmask(int how, const sigset_t* set, sigset_t* oldSet);
92
93 int __sigpending_beos(sigset_t_beos* beosSet);
94 int __sigpending(sigset_t* set);
95
96 int __sigsuspend_beos(const sigset_t_beos* beosMask);
97 int __sigsuspend(const sigset_t* mask);
98
99 int __sigwait_beos(const sigset_t_beos* beosSet, int* _signal);
100 int __sigwait(const sigset_t* set, int* _signal);
101
102 int __sigemptyset_beos(sigset_t_beos* set);
103 int __sigfillset_beos(sigset_t_beos* set);
104 int __sigismember_beos(const sigset_t_beos* set, int signal);
105 int __sigaddset_beos(sigset_t_beos* set, int signal);
106 int __sigdelset_beos(sigset_t_beos* set, int signal);
107
108 int __sigemptyset(sigset_t* set);
109 int __sigfillset(sigset_t* set);
110 int __sigismember(const sigset_t* set, int signal);
111 int __sigaddset(sigset_t* set, int signal);
112 int __sigdelset(sigset_t* set, int signal);
113
114
115 __END_DECLS
116
117
118 #endif // _LIBROOT_SIGNAL_PRIVATE_H
119