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

4.104.114.84.95
Last change on this file since c238a218 was c238a218, checked in by Joel Sherrill <joel.sherrill@…>, on 05/31/96 at 21:40:48

added checks to validate values passed to set attribute routines

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