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
18typedef __haiku_int32 sigset_t_beos;
19
20struct sigaction_beos {
21	__sighandler_t	sa_handler;
22	sigset_t_beos	sa_mask;
23	int				sa_flags;
24	void*			sa_userdata;
25};
26
27
28static inline sigset_t_beos
29to_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
43static inline sigset_t
44from_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
62int __sigaction_beos(int signal, const struct sigaction_beos* beosAction,
63	struct sigaction_beos* beosOldAction);
64int __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
70int __sigignore_beos(int signal);
71int __sigignore(int signal);
72
73int __sighold_beos(int signal);
74int __sighold(int signal);
75
76int __sigrelse_beos(int signal);
77int __sigrelse(int signal);
78
79int __sigpause_beos(int signal);
80int __sigpause(int signal);
81
82int __siginterrupt_beos(int signal, int flag);
83int __siginterrupt(int signal, int flag);
84
85int __pthread_sigmask_beos(int how, const sigset_t_beos* beosSet,
86	sigset_t_beos* beosOldSet);
87int __sigprocmask_beos(int how, const sigset_t_beos* beosSet,
88	sigset_t_beos* beosOldSet);
89
90int __pthread_sigmask(int how, const sigset_t* set, sigset_t* oldSet);
91int __sigprocmask(int how, const sigset_t* set, sigset_t* oldSet);
92
93int __sigpending_beos(sigset_t_beos* beosSet);
94int __sigpending(sigset_t* set);
95
96int __sigsuspend_beos(const sigset_t_beos* beosMask);
97int __sigsuspend(const sigset_t* mask);
98
99int __sigwait_beos(const sigset_t_beos* beosSet, int* _signal);
100int __sigwait(const sigset_t* set, int* _signal);
101
102int __sigemptyset_beos(sigset_t_beos* set);
103int __sigfillset_beos(sigset_t_beos* set);
104int __sigismember_beos(const sigset_t_beos* set, int signal);
105int __sigaddset_beos(sigset_t_beos* set, int signal);
106int __sigdelset_beos(sigset_t_beos* set, int signal);
107
108int __sigemptyset(sigset_t* set);
109int __sigfillset(sigset_t* set);
110int __sigismember(const sigset_t* set, int signal);
111int __sigaddset(sigset_t* set, int signal);
112int __sigdelset(sigset_t* set, int signal);
113
114
115__END_DECLS
116
117
118#endif	// _LIBROOT_SIGNAL_PRIVATE_H
119