Commit | Line | Data |
---|---|---|
a4a9692d DL |
1 | /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ |
2 | #include <signal.h> | |
3 | #include <errno.h> | |
4 | ||
5 | int | |
6 | sigaction(int _sig, const struct sigaction *_act, struct sigaction *_oact) | |
7 | { | |
8 | int retval = 0; | |
9 | ||
10 | if (_oact) | |
11 | { | |
12 | void (*installed_sig)(int) = signal (_sig, SIG_IGN); | |
13 | ||
14 | /* FIXME */ | |
15 | if (installed_sig == SIG_ERR) | |
16 | { | |
17 | retval = -1; | |
18 | errno = EINVAL; | |
19 | } | |
20 | else | |
21 | signal (_sig, installed_sig); | |
22 | _oact->sa_handler = installed_sig; | |
23 | retval = sigemptyset (&_oact->sa_mask); | |
24 | _oact->sa_flags = 0; | |
25 | } | |
26 | if (_act) | |
27 | { | |
28 | if (signal (_sig, _act->sa_handler) == SIG_ERR) | |
29 | { | |
30 | retval = -1; | |
31 | errno = EINVAL; | |
32 | } | |
33 | } | |
34 | return 0; | |
35 | } | |
36 | ||
37 | ||
38 |