Blame gnulib/lib/raise.c

Packit Service 51e54d
/* Provide a non-threads replacement for the POSIX raise function.
Packit Service 51e54d
Packit Service 51e54d
   Copyright (C) 2002-2003, 2005-2006, 2009-2014 Free Software Foundation, Inc.
Packit Service 51e54d
Packit Service 51e54d
   This program is free software: you can redistribute it and/or modify
Packit Service 51e54d
   it under the terms of the GNU General Public License as published by
Packit Service 51e54d
   the Free Software Foundation; either version 3 of the License, or
Packit Service 51e54d
   (at your option) any later version.
Packit Service 51e54d
Packit Service 51e54d
   This program is distributed in the hope that it will be useful,
Packit Service 51e54d
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 51e54d
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 51e54d
   GNU General Public License for more details.
Packit Service 51e54d
Packit Service 51e54d
   You should have received a copy of the GNU General Public License
Packit Service 51e54d
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
Packit Service 51e54d
Packit Service 51e54d
/* written by Jim Meyering and Bruno Haible */
Packit Service 51e54d
Packit Service 51e54d
#include <config.h>
Packit Service 51e54d
Packit Service 51e54d
/* Specification.  */
Packit Service 51e54d
#include <signal.h>
Packit Service 51e54d
Packit Service 51e54d
#if HAVE_RAISE
Packit Service 51e54d
/* Native Windows platform.  */
Packit Service 51e54d
Packit Service 51e54d
# include <errno.h>
Packit Service 51e54d
Packit Service 51e54d
# include "msvc-inval.h"
Packit Service 51e54d
Packit Service 51e54d
# undef raise
Packit Service 51e54d
Packit Service 51e54d
# if HAVE_MSVC_INVALID_PARAMETER_HANDLER
Packit Service 51e54d
static int
Packit Service 51e54d
raise_nothrow (int sig)
Packit Service 51e54d
{
Packit Service 51e54d
  int result;
Packit Service 51e54d
Packit Service 51e54d
  TRY_MSVC_INVAL
Packit Service 51e54d
    {
Packit Service 51e54d
      result = raise (sig);
Packit Service 51e54d
    }
Packit Service 51e54d
  CATCH_MSVC_INVAL
Packit Service 51e54d
    {
Packit Service 51e54d
      result = -1;
Packit Service 51e54d
      errno = EINVAL;
Packit Service 51e54d
    }
Packit Service 51e54d
  DONE_MSVC_INVAL;
Packit Service 51e54d
Packit Service 51e54d
  return result;
Packit Service 51e54d
}
Packit Service 51e54d
# else
Packit Service 51e54d
#  define raise_nothrow raise
Packit Service 51e54d
# endif
Packit Service 51e54d
Packit Service 51e54d
#else
Packit Service 51e54d
/* An old Unix platform.  */
Packit Service 51e54d
Packit Service 51e54d
# include <unistd.h>
Packit Service 51e54d
Packit Service 51e54d
# define rpl_raise raise
Packit Service 51e54d
Packit Service 51e54d
#endif
Packit Service 51e54d
Packit Service 51e54d
int
Packit Service 51e54d
rpl_raise (int sig)
Packit Service 51e54d
{
Packit Service 51e54d
#if GNULIB_defined_signal_blocking && GNULIB_defined_SIGPIPE
Packit Service 51e54d
  if (sig == SIGPIPE)
Packit Service 51e54d
    return _gl_raise_SIGPIPE ();
Packit Service 51e54d
#endif
Packit Service 51e54d
Packit Service 51e54d
#if HAVE_RAISE
Packit Service 51e54d
  return raise_nothrow (sig);
Packit Service 51e54d
#else
Packit Service 51e54d
  return kill (getpid (), sig);
Packit Service 51e54d
#endif
Packit Service 51e54d
}