Commit | Line | Data |
---|---|---|
35428fb6 LC |
1 | /* Provide a non-threads replacement for the POSIX raise function. |
2 | ||
5e69ceb7 | 3 | Copyright (C) 2002-2003, 2005-2006, 2009-2014 Free Software Foundation, Inc. |
35428fb6 LC |
4 | |
5 | This program is free software: you can redistribute it and/or modify | |
6 | it under the terms of the GNU Lesser General Public License as published by | |
7 | the Free Software Foundation; either version 3 of the License, or | |
8 | (at your option) any later version. | |
9 | ||
10 | This program is distributed in the hope that it will be useful, | |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | GNU Lesser General Public License for more details. | |
14 | ||
15 | You should have received a copy of the GNU Lesser General Public License | |
16 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ | |
17 | ||
18 | /* written by Jim Meyering and Bruno Haible */ | |
19 | ||
20 | #include <config.h> | |
21 | ||
22 | /* Specification. */ | |
23 | #include <signal.h> | |
24 | ||
25 | #if HAVE_RAISE | |
26 | /* Native Windows platform. */ | |
27 | ||
28 | # include <errno.h> | |
29 | ||
30 | # include "msvc-inval.h" | |
31 | ||
32 | # undef raise | |
33 | ||
34 | # if HAVE_MSVC_INVALID_PARAMETER_HANDLER | |
af07e104 | 35 | static int |
35428fb6 LC |
36 | raise_nothrow (int sig) |
37 | { | |
38 | int result; | |
39 | ||
40 | TRY_MSVC_INVAL | |
41 | { | |
42 | result = raise (sig); | |
43 | } | |
44 | CATCH_MSVC_INVAL | |
45 | { | |
46 | result = -1; | |
47 | errno = EINVAL; | |
48 | } | |
49 | DONE_MSVC_INVAL; | |
50 | ||
51 | return result; | |
52 | } | |
53 | # else | |
54 | # define raise_nothrow raise | |
55 | # endif | |
56 | ||
57 | #else | |
58 | /* An old Unix platform. */ | |
59 | ||
60 | # include <unistd.h> | |
61 | ||
62 | # define rpl_raise raise | |
63 | ||
64 | #endif | |
65 | ||
66 | int | |
67 | rpl_raise (int sig) | |
68 | { | |
69 | #if GNULIB_defined_signal_blocking && GNULIB_defined_SIGPIPE | |
70 | if (sig == SIGPIPE) | |
71 | return _gl_raise_SIGPIPE (); | |
72 | #endif | |
73 | ||
74 | #if HAVE_RAISE | |
75 | return raise_nothrow (sig); | |
76 | #else | |
77 | return kill (getpid (), sig); | |
78 | #endif | |
79 | } |