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 35static int 36raise_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 66int 67rpl_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