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