Commit | Line | Data |
---|---|---|
95fe4534 GM |
1 | /* sigaction.c |
2 | * | |
3 | * Copyright (C) 1995 DJ Delorie | |
4 | * | |
5 | * (See the README file in this directory for the copyright and license | |
6 | * history of this file.) | |
7 | * | |
ff0cdfb9 | 8 | * This file is free software: you can redistribute it and/or modify |
95fe4534 | 9 | * it under the terms of the GNU General Public License as published by |
ff0cdfb9 GM |
10 | * the Free Software Foundation, either version 3 of the License, or |
11 | * (at your option) any later version. | |
95fe4534 GM |
12 | * |
13 | * This file is distributed in the hope that it will be useful, | |
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 | * GNU General Public License for more details. | |
17 | * | |
18 | * You should have received a copy of the GNU General Public License | |
ff0cdfb9 | 19 | * along with this file. If not, see <http://www.gnu.org/licenses/>. |
95fe4534 | 20 | */ |
a4a9692d DL |
21 | #include <signal.h> |
22 | #include <errno.h> | |
23 | ||
24 | int | |
25 | sigaction(int _sig, const struct sigaction *_act, struct sigaction *_oact) | |
26 | { | |
27 | int retval = 0; | |
28 | ||
29 | if (_oact) | |
30 | { | |
31 | void (*installed_sig)(int) = signal (_sig, SIG_IGN); | |
32 | ||
33 | /* FIXME */ | |
34 | if (installed_sig == SIG_ERR) | |
35 | { | |
36 | retval = -1; | |
37 | errno = EINVAL; | |
38 | } | |
39 | else | |
40 | signal (_sig, installed_sig); | |
41 | _oact->sa_handler = installed_sig; | |
42 | retval = sigemptyset (&_oact->sa_mask); | |
43 | _oact->sa_flags = 0; | |
44 | } | |
45 | if (_act) | |
46 | { | |
47 | if (signal (_sig, _act->sa_handler) == SIG_ERR) | |
48 | { | |
49 | retval = -1; | |
50 | errno = EINVAL; | |
51 | } | |
52 | } | |
53 | return 0; | |
54 | } | |
55 | ||
56 | ||
57 |