1 /* Provide a non-threads replacement for the POSIX raise function. 2 3 Copyright (C) 2002-2003, 2005-2006, 2009-2012 Free Software Foundation, Inc. 4 5 This program is free software: you can redistribute it and/or modify 6 it under the terms of the GNU 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 General Public License for more details. 14 15 You should have received a copy of the GNU 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 35 static int 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 } 80