source: rtems/cpukit/posix/src/psignal.c @ e72d995a

4.104.114.84.95
Last change on this file since e72d995a was e72d995a, checked in by Joel Sherrill <joel.sherrill@…>, on 05/31/96 at 19:01:26

moved sleep() from psignal.c to unistd.c

implemented sigemptyset() sigfillset(), sigaddset(), sigdelset(), and
sigismember().

added checks for valid attribute values to some of the pthread_attr_t sets.

  • Property mode set to 100644
File size: 4.1 KB
Line 
1/*
2 *  $Id$
3 */
4
5#include <assert.h>
6#include <errno.h>
7#include <signal.h>
8
9#include <rtems/system.h>
10#include <rtems/score/thread.h>
11
12/*
13 *  Currently only 20 signals numbered 1-20 are defined
14 */
15
16#define SIGNAL_ALL_MASK  0x000fffff
17
18#define signo_to_mask( _sig ) (1 << ((_sig) - 1))
19
20#define is_valid_signo( _sig ) \
21  ((signo_to_mask(_sig) & SIGNAL_ALL_MASK) != 0 )
22
23/*
24 *  3.3.2 Send a Signal to a Process, P1003.1b-1993, p. 68
25 *
26 *  NOTE: Behavior of kill() depends on _POSIX_SAVED_IDS.
27 */
28
29int kill(
30  pid_t pid,
31  int   sig
32)
33{
34  /* SIGABRT comes from abort via assert */
35  if ( sig == SIGABRT ) {
36    exit( 1 );
37  }
38  return POSIX_NOT_IMPLEMENTED();
39}
40
41/*
42 *  3.3.3 Manipulate Signal Sets, P1003.1b-1993, p. 69
43 */
44
45int sigemptyset(
46  sigset_t   *set
47)
48{
49  assert( set );  /* no word from posix, solaris returns EFAULT */
50
51  *set = 0;
52  return 0;
53}
54
55/*
56 *  3.3.3 Manipulate Signal Sets, P1003.1b-1993, p. 69
57 */
58
59int sigfillset(
60  sigset_t   *set
61)
62{
63  assert( set );
64
65  *set = SIGNAL_ALL_MASK;
66  return 0;
67}
68
69/*
70 *  3.3.3 Manipulate Signal Sets, P1003.1b-1993, p. 69
71 */
72
73int sigaddset(
74  sigset_t   *set,
75  int         signo
76)
77{
78  assert( set );
79
80  if ( !is_valid_signo(signo) ) {
81    errno = EINVAL;
82    return -1;
83  }
84
85  *set |= signo_to_mask(signo);
86  return 0;
87}
88
89/*
90 *  3.3.3 Manipulate Signal Sets, P1003.1b-1993, p. 69
91 */
92
93int sigdelset(
94  sigset_t   *set,
95  int         signo
96)
97{
98  assert( set );
99 
100  if ( !is_valid_signo(signo) ) {
101    errno = EINVAL;
102    return -1;
103  }
104 
105  *set &= ~signo_to_mask(signo);
106  return 0;
107}
108
109/*
110 *  3.3.3 Manipulate Signal Sets, P1003.1b-1993, p. 69
111 */
112
113int sigismember(
114  const sigset_t   *set,
115  int               signo
116)
117{
118  assert( set );
119 
120  if ( !is_valid_signo(signo) ) {
121    errno = EINVAL;
122    return -1;
123  }
124 
125  if ( *set & signo_to_mask(signo) )
126    return 1;
127
128  return 0;
129}
130
131/*
132 *  3.3.4 Examine and Change Signal Action, P1003.1b-1993, p. 70
133 */
134
135int sigaction(
136  int                     sig,
137  const struct sigaction *act,
138  struct sigaction       *oact
139)
140{
141  return POSIX_NOT_IMPLEMENTED();
142}
143
144/*
145 *  3.3.5 Examine and Change Blocked Signals, P1003.1b-1993, p. 73
146 *
147 *  NOTE: P1003.1c/D10, p. 37 adds pthread_sigmask().
148 */
149
150int sigprocmask(
151  int               how,
152  const sigset_t   *set,
153  sigset_t         *oset
154)
155{
156  return POSIX_NOT_IMPLEMENTED();
157}
158
159/*
160 *  3.3.5 Examine and Change Blocked Signals, P1003.1b-1993, p. 73
161 *
162 *  NOTE: P1003.1c/D10, p. 37 adds pthread_sigmask().
163 */
164
165int pthread_sigmask(
166  int               how,
167  const sigset_t   *set,
168  sigset_t         *oset
169)
170{
171  return POSIX_NOT_IMPLEMENTED();
172}
173
174/*
175 *  3.3.6 Examine Pending Signals, P1003.1b-1993, p. 75
176 */
177
178int sigpending(
179  sigset_t  *set
180)
181{
182  return POSIX_NOT_IMPLEMENTED();
183}
184
185/*
186 *  3.3.7 Wait for a Signal, P1003.1b-1993, p. 75
187 */
188
189int sigsuspend(
190  const sigset_t  *sigmask
191)
192{
193  return POSIX_NOT_IMPLEMENTED();
194}
195
196/*
197 *  3.3.8 Synchronously Accept a Signal, P1003.1b-1993, p. 76
198 *
199 *  NOTE: P1003.1c/D10, p. 39 adds sigwait().
200 */
201
202int sigwaitinfo(
203  const sigset_t  *set,
204  siginfo_t       *info
205)
206{
207  return POSIX_NOT_IMPLEMENTED();
208}
209
210/*
211 *  3.3.8 Synchronously Accept a Signal, P1003.1b-1993, p. 76
212 *
213 *  NOTE: P1003.1c/D10, p. 39 adds sigwait().
214 */
215
216int sigtimedwait(
217  const sigset_t         *set,
218  siginfo_t              *info,
219  const struct timespec  *timeout
220)
221{
222  return POSIX_NOT_IMPLEMENTED();
223}
224
225/*
226 *  3.3.8 Synchronously Accept a Signal, P1003.1b-1993, p. 76
227 *
228 *  NOTE: P1003.1c/D10, p. 39 adds sigwait().
229 */
230
231int sigwait(
232  const sigset_t  *set,
233  int             *sig
234)
235{
236  return POSIX_NOT_IMPLEMENTED();
237}
238
239/*
240 *  3.3.9 Queue a Signal to a Process, P1003.1b-1993, p. 78
241 */
242
243int sigqueue(
244  pid_t               pid,
245  int                 signo,
246  const union sigval  value
247)
248{
249  return POSIX_NOT_IMPLEMENTED();
250}
251
252/*
253 *  3.3.10 Send a Signal to a Thread, P1003.1c/D10, p. 43
254 */
255
256int pthread_kill(
257  pthread_t   thread,
258  int         sig
259)
260{
261  return POSIX_NOT_IMPLEMENTED();
262}
263
264/*
265 *  3.4.1 Schedule Alarm, P1003.1b-1993, p. 79
266 */
267
268unsigned int alarm(
269  unsigned int seconds
270)
271{
272  return POSIX_NOT_IMPLEMENTED();
273}
274
275/*
276 *  3.4.2 Suspend Process Execution, P1003.1b-1993, p. 81
277 */
278
279int pause( void )
280{
281  return POSIX_NOT_IMPLEMENTED();
282}
Note: See TracBrowser for help on using the repository browser.