1/*
2 * Copyright 2002-2011, Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT license.
4 *
5 * Author:
6 *		Daniel Reinhold, danielre@users.sf.net
7 *		Ingo Weinhold, ingo_weinhold@gmx.de
8 */
9
10
11#include <signal.h>
12
13#include <errno.h>
14
15#include <signal_defs.h>
16#include <syscalls.h>
17
18#include <symbol_versioning.h>
19
20#include <errno_private.h>
21#include <signal_private.h>
22
23
24// #pragma - backward compatibility implementations
25
26
27int
28__sigemptyset_beos(sigset_t_beos* set)
29{
30	*set = (sigset_t_beos)0;
31	return 0;
32}
33
34
35int
36__sigfillset_beos(sigset_t_beos* set)
37{
38	*set = ~(sigset_t_beos)0;
39	return 0;
40}
41
42
43int
44__sigismember_beos(const sigset_t_beos* set, int signal)
45{
46	if (signal <= 0 || signal > MAX_SIGNAL_NUMBER_BEOS) {
47		__set_errno(EINVAL);
48		return -1;
49	}
50
51	return (*set & SIGNAL_TO_MASK(signal)) != 0 ? 1 : 0;
52}
53
54
55int
56__sigaddset_beos(sigset_t_beos* set, int signal)
57{
58	if (signal <= 0 || signal > MAX_SIGNAL_NUMBER_BEOS) {
59		__set_errno(EINVAL);
60		return -1;
61	}
62
63	*set |= SIGNAL_TO_MASK(signal);
64	return 0;
65}
66
67
68int
69__sigdelset_beos(sigset_t_beos* set, int signal)
70{
71	if (signal <= 0 || signal > MAX_SIGNAL_NUMBER_BEOS) {
72		__set_errno(EINVAL);
73		return -1;
74	}
75
76	*set &= ~SIGNAL_TO_MASK(signal);
77	return 0;
78}
79
80
81// #pragma - current implementations
82
83
84int
85__sigemptyset(sigset_t* set)
86{
87	*set = (sigset_t)0;
88	return 0;
89}
90
91
92int
93__sigfillset(sigset_t* set)
94{
95	*set = ~(sigset_t)0;
96	return 0;
97}
98
99
100int
101__sigismember(const sigset_t* set, int signal)
102{
103	if (signal <= 0 || signal > MAX_SIGNAL_NUMBER) {
104		__set_errno(EINVAL);
105		return -1;
106	}
107
108	return (*set & SIGNAL_TO_MASK(signal)) != 0 ? 1 : 0;
109}
110
111
112int
113__sigaddset(sigset_t* set, int signal)
114{
115	if (signal <= 0 || signal > MAX_SIGNAL_NUMBER) {
116		__set_errno(EINVAL);
117		return -1;
118	}
119
120	*set |= SIGNAL_TO_MASK(signal);
121	return 0;
122}
123
124
125int
126__sigdelset(sigset_t* set, int signal)
127{
128	if (signal <= 0 || signal > MAX_SIGNAL_NUMBER) {
129		__set_errno(EINVAL);
130		return -1;
131	}
132
133	*set &= ~SIGNAL_TO_MASK(signal);
134	return 0;
135}
136
137
138// #pragma - versioned symbols
139
140
141DEFINE_LIBROOT_KERNEL_SYMBOL_VERSION("__sigemptyset_beos", "sigemptyset@",
142	"BASE");
143DEFINE_LIBROOT_KERNEL_SYMBOL_VERSION("__sigfillset_beos", "sigfillset@",
144	"BASE");
145DEFINE_LIBROOT_KERNEL_SYMBOL_VERSION("__sigismember_beos", "sigismember@",
146	"BASE");
147DEFINE_LIBROOT_KERNEL_SYMBOL_VERSION("__sigaddset_beos", "sigaddset@", "BASE");
148DEFINE_LIBROOT_KERNEL_SYMBOL_VERSION("__sigdelset_beos", "sigdelset@", "BASE");
149
150DEFINE_LIBROOT_KERNEL_SYMBOL_VERSION("__sigemptyset", "sigemptyset@@",
151	"1_ALPHA4");
152DEFINE_LIBROOT_KERNEL_SYMBOL_VERSION("__sigfillset", "sigfillset@@",
153	"1_ALPHA4");
154DEFINE_LIBROOT_KERNEL_SYMBOL_VERSION("__sigismember", "sigismember@@",
155	"1_ALPHA4");
156DEFINE_LIBROOT_KERNEL_SYMBOL_VERSION("__sigaddset", "sigaddset@@", "1_ALPHA4");
157DEFINE_LIBROOT_KERNEL_SYMBOL_VERSION("__sigdelset", "sigdelset@@", "1_ALPHA4");
158