Blame gnulib/lib/signal.in.h

Packit eba2e2
/* A GNU-like <signal.h>.
Packit eba2e2
Packit eba2e2
   Copyright (C) 2006-2014 Free Software Foundation, Inc.
Packit eba2e2
Packit eba2e2
   This program is free software: you can redistribute it and/or modify
Packit eba2e2
   it under the terms of the GNU General Public License as published by
Packit eba2e2
   the Free Software Foundation; either version 3 of the License, or
Packit eba2e2
   (at your option) any later version.
Packit eba2e2
Packit eba2e2
   This program is distributed in the hope that it will be useful,
Packit eba2e2
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit eba2e2
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit eba2e2
   GNU General Public License for more details.
Packit eba2e2
Packit eba2e2
   You should have received a copy of the GNU General Public License
Packit eba2e2
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
Packit eba2e2
Packit eba2e2
#if __GNUC__ >= 3
Packit eba2e2
@PRAGMA_SYSTEM_HEADER@
Packit eba2e2
#endif
Packit eba2e2
@PRAGMA_COLUMNS@
Packit eba2e2
Packit eba2e2
#if defined __need_sig_atomic_t || defined __need_sigset_t || defined _GL_ALREADY_INCLUDING_SIGNAL_H || (defined _SIGNAL_H && !defined __SIZEOF_PTHREAD_MUTEX_T)
Packit eba2e2
/* Special invocation convention:
Packit eba2e2
   - Inside glibc header files.
Packit eba2e2
   - On glibc systems we have a sequence of nested includes
Packit eba2e2
     <signal.h> -> <ucontext.h> -> <signal.h>.
Packit eba2e2
     In this situation, the functions are not yet declared, therefore we cannot
Packit eba2e2
     provide the C++ aliases.
Packit eba2e2
   - On glibc systems with GCC 4.3 we have a sequence of nested includes
Packit eba2e2
     <csignal> -> </usr/include/signal.h> -> <sys/ucontext.h> -> <signal.h>.
Packit eba2e2
     In this situation, some of the functions are not yet declared, therefore
Packit eba2e2
     we cannot provide the C++ aliases.  */
Packit eba2e2
Packit eba2e2
# @INCLUDE_NEXT@ @NEXT_SIGNAL_H@
Packit eba2e2
Packit eba2e2
#else
Packit eba2e2
/* Normal invocation convention.  */
Packit eba2e2
Packit eba2e2
#ifndef _@GUARD_PREFIX@_SIGNAL_H
Packit eba2e2
Packit eba2e2
#define _GL_ALREADY_INCLUDING_SIGNAL_H
Packit eba2e2
Packit eba2e2
/* Define pid_t, uid_t.
Packit eba2e2
   Also, mingw defines sigset_t not in <signal.h>, but in <sys/types.h>.
Packit eba2e2
   On Solaris 10, <signal.h> includes <sys/types.h>, which eventually includes
Packit eba2e2
   us; so include <sys/types.h> now, before the second inclusion guard.  */
Packit eba2e2
#include <sys/types.h>
Packit eba2e2
Packit eba2e2
/* The include_next requires a split double-inclusion guard.  */
Packit eba2e2
#@INCLUDE_NEXT@ @NEXT_SIGNAL_H@
Packit eba2e2
Packit eba2e2
#undef _GL_ALREADY_INCLUDING_SIGNAL_H
Packit eba2e2
Packit eba2e2
#ifndef _@GUARD_PREFIX@_SIGNAL_H
Packit eba2e2
#define _@GUARD_PREFIX@_SIGNAL_H
Packit eba2e2
Packit eba2e2
/* Mac OS X 10.3, FreeBSD 6.4, OpenBSD 3.8, OSF/1 4.0, Solaris 2.6 declare
Packit eba2e2
   pthread_sigmask in <pthread.h>, not in <signal.h>.
Packit eba2e2
   But avoid namespace pollution on glibc systems.*/
Packit eba2e2
#if (@GNULIB_PTHREAD_SIGMASK@ || defined GNULIB_POSIXCHECK) \
Packit eba2e2
    && ((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __OpenBSD__ || defined __osf__ || defined __sun) \
Packit eba2e2
    && ! defined __GLIBC__
Packit eba2e2
# include <pthread.h>
Packit eba2e2
#endif
Packit eba2e2
Packit eba2e2
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
Packit eba2e2
Packit eba2e2
/* The definition of _GL_ARG_NONNULL is copied here.  */
Packit eba2e2
Packit eba2e2
/* The definition of _GL_WARN_ON_USE is copied here.  */
Packit eba2e2
Packit eba2e2
/* On AIX, sig_atomic_t already includes volatile.  C99 requires that
Packit eba2e2
   'volatile sig_atomic_t' ignore the extra modifier, but C89 did not.
Packit eba2e2
   Hence, redefine this to a non-volatile type as needed.  */
Packit eba2e2
#if ! @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
Packit eba2e2
# if !GNULIB_defined_sig_atomic_t
Packit eba2e2
typedef int rpl_sig_atomic_t;
Packit eba2e2
#  undef sig_atomic_t
Packit eba2e2
#  define sig_atomic_t rpl_sig_atomic_t
Packit eba2e2
#  define GNULIB_defined_sig_atomic_t 1
Packit eba2e2
# endif
Packit eba2e2
#endif
Packit eba2e2
Packit eba2e2
/* A set or mask of signals.  */
Packit eba2e2
#if !@HAVE_SIGSET_T@
Packit eba2e2
# if !GNULIB_defined_sigset_t
Packit eba2e2
typedef unsigned int sigset_t;
Packit eba2e2
#  define GNULIB_defined_sigset_t 1
Packit eba2e2
# endif
Packit eba2e2
#endif
Packit eba2e2
Packit eba2e2
/* Define sighandler_t, the type of signal handlers.  A GNU extension.  */
Packit eba2e2
#if !@HAVE_SIGHANDLER_T@
Packit eba2e2
# ifdef __cplusplus
Packit eba2e2
extern "C" {
Packit eba2e2
# endif
Packit eba2e2
# if !GNULIB_defined_sighandler_t
Packit eba2e2
typedef void (*sighandler_t) (int);
Packit eba2e2
#  define GNULIB_defined_sighandler_t 1
Packit eba2e2
# endif
Packit eba2e2
# ifdef __cplusplus
Packit eba2e2
}
Packit eba2e2
# endif
Packit eba2e2
#endif
Packit eba2e2
Packit eba2e2
Packit eba2e2
#if @GNULIB_SIGNAL_H_SIGPIPE@
Packit eba2e2
# ifndef SIGPIPE
Packit eba2e2
/* Define SIGPIPE to a value that does not overlap with other signals.  */
Packit eba2e2
#  define SIGPIPE 13
Packit eba2e2
#  define GNULIB_defined_SIGPIPE 1
Packit eba2e2
/* To actually use SIGPIPE, you also need the gnulib modules 'sigprocmask',
Packit eba2e2
   'write', 'stdio'.  */
Packit eba2e2
# endif
Packit eba2e2
#endif
Packit eba2e2
Packit eba2e2
Packit eba2e2
/* Maximum signal number + 1.  */
Packit eba2e2
#ifndef NSIG
Packit eba2e2
# if defined __TANDEM
Packit eba2e2
#  define NSIG 32
Packit eba2e2
# endif
Packit eba2e2
#endif
Packit eba2e2
Packit eba2e2
Packit eba2e2
#if @GNULIB_PTHREAD_SIGMASK@
Packit eba2e2
# if @REPLACE_PTHREAD_SIGMASK@
Packit eba2e2
#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
Packit eba2e2
#   undef pthread_sigmask
Packit eba2e2
#   define pthread_sigmask rpl_pthread_sigmask
Packit eba2e2
#  endif
Packit eba2e2
_GL_FUNCDECL_RPL (pthread_sigmask, int,
Packit eba2e2
                  (int how, const sigset_t *new_mask, sigset_t *old_mask));
Packit eba2e2
_GL_CXXALIAS_RPL (pthread_sigmask, int,
Packit eba2e2
                  (int how, const sigset_t *new_mask, sigset_t *old_mask));
Packit eba2e2
# else
Packit eba2e2
#  if !@HAVE_PTHREAD_SIGMASK@
Packit eba2e2
_GL_FUNCDECL_SYS (pthread_sigmask, int,
Packit eba2e2
                  (int how, const sigset_t *new_mask, sigset_t *old_mask));
Packit eba2e2
#  endif
Packit eba2e2
_GL_CXXALIAS_SYS (pthread_sigmask, int,
Packit eba2e2
                  (int how, const sigset_t *new_mask, sigset_t *old_mask));
Packit eba2e2
# endif
Packit eba2e2
_GL_CXXALIASWARN (pthread_sigmask);
Packit eba2e2
#elif defined GNULIB_POSIXCHECK
Packit eba2e2
# undef pthread_sigmask
Packit eba2e2
# if HAVE_RAW_DECL_PTHREAD_SIGMASK
Packit eba2e2
_GL_WARN_ON_USE (pthread_sigmask, "pthread_sigmask is not portable - "
Packit eba2e2
                 "use gnulib module pthread_sigmask for portability");
Packit eba2e2
# endif
Packit eba2e2
#endif
Packit eba2e2
Packit eba2e2
Packit eba2e2
#if @GNULIB_RAISE@
Packit eba2e2
# if @REPLACE_RAISE@
Packit eba2e2
#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
Packit eba2e2
#   undef raise
Packit eba2e2
#   define raise rpl_raise
Packit eba2e2
#  endif
Packit eba2e2
_GL_FUNCDECL_RPL (raise, int, (int sig));
Packit eba2e2
_GL_CXXALIAS_RPL (raise, int, (int sig));
Packit eba2e2
# else
Packit eba2e2
#  if !@HAVE_RAISE@
Packit eba2e2
_GL_FUNCDECL_SYS (raise, int, (int sig));
Packit eba2e2
#  endif
Packit eba2e2
_GL_CXXALIAS_SYS (raise, int, (int sig));
Packit eba2e2
# endif
Packit eba2e2
_GL_CXXALIASWARN (raise);
Packit eba2e2
#elif defined GNULIB_POSIXCHECK
Packit eba2e2
# undef raise
Packit eba2e2
/* Assume raise is always declared.  */
Packit eba2e2
_GL_WARN_ON_USE (raise, "raise can crash on native Windows - "
Packit eba2e2
                 "use gnulib module raise for portability");
Packit eba2e2
#endif
Packit eba2e2
Packit eba2e2
Packit eba2e2
#if @GNULIB_SIGPROCMASK@
Packit eba2e2
# if !@HAVE_POSIX_SIGNALBLOCKING@
Packit eba2e2
Packit eba2e2
#  ifndef GNULIB_defined_signal_blocking
Packit eba2e2
#   define GNULIB_defined_signal_blocking 1
Packit eba2e2
#  endif
Packit eba2e2
Packit eba2e2
/* Maximum signal number + 1.  */
Packit eba2e2
#  ifndef NSIG
Packit eba2e2
#   define NSIG 32
Packit eba2e2
#  endif
Packit eba2e2
Packit eba2e2
/* This code supports only 32 signals.  */
Packit eba2e2
#  if !GNULIB_defined_verify_NSIG_constraint
Packit eba2e2
typedef int verify_NSIG_constraint[NSIG <= 32 ? 1 : -1];
Packit eba2e2
#   define GNULIB_defined_verify_NSIG_constraint 1
Packit eba2e2
#  endif
Packit eba2e2
Packit eba2e2
# endif
Packit eba2e2
Packit eba2e2
/* When also using extern inline, suppress the use of static inline in
Packit eba2e2
   standard headers of problematic Apple configurations, as Libc at
Packit eba2e2
   least through Libc-825.26 (2013-04-09) mishandles it; see, e.g.,
Packit eba2e2
   <http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html>.
Packit eba2e2
   Perhaps Apple will fix this some day.  */
Packit eba2e2
#if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \
Packit eba2e2
     && (defined __i386__ || defined __x86_64__))
Packit eba2e2
# undef sigaddset
Packit eba2e2
# undef sigdelset
Packit eba2e2
# undef sigemptyset
Packit eba2e2
# undef sigfillset
Packit eba2e2
# undef sigismember
Packit eba2e2
#endif
Packit eba2e2
Packit eba2e2
/* Test whether a given signal is contained in a signal set.  */
Packit eba2e2
# if @HAVE_POSIX_SIGNALBLOCKING@
Packit eba2e2
/* This function is defined as a macro on Mac OS X.  */
Packit eba2e2
#  if defined __cplusplus && defined GNULIB_NAMESPACE
Packit eba2e2
#   undef sigismember
Packit eba2e2
#  endif
Packit eba2e2
# else
Packit eba2e2
_GL_FUNCDECL_SYS (sigismember, int, (const sigset_t *set, int sig)
Packit eba2e2
                                    _GL_ARG_NONNULL ((1)));
Packit eba2e2
# endif
Packit eba2e2
_GL_CXXALIAS_SYS (sigismember, int, (const sigset_t *set, int sig));
Packit eba2e2
_GL_CXXALIASWARN (sigismember);
Packit eba2e2
Packit eba2e2
/* Initialize a signal set to the empty set.  */
Packit eba2e2
# if @HAVE_POSIX_SIGNALBLOCKING@
Packit eba2e2
/* This function is defined as a macro on Mac OS X.  */
Packit eba2e2
#  if defined __cplusplus && defined GNULIB_NAMESPACE
Packit eba2e2
#   undef sigemptyset
Packit eba2e2
#  endif
Packit eba2e2
# else
Packit eba2e2
_GL_FUNCDECL_SYS (sigemptyset, int, (sigset_t *set) _GL_ARG_NONNULL ((1)));
Packit eba2e2
# endif
Packit eba2e2
_GL_CXXALIAS_SYS (sigemptyset, int, (sigset_t *set));
Packit eba2e2
_GL_CXXALIASWARN (sigemptyset);
Packit eba2e2
Packit eba2e2
/* Add a signal to a signal set.  */
Packit eba2e2
# if @HAVE_POSIX_SIGNALBLOCKING@
Packit eba2e2
/* This function is defined as a macro on Mac OS X.  */
Packit eba2e2
#  if defined __cplusplus && defined GNULIB_NAMESPACE
Packit eba2e2
#   undef sigaddset
Packit eba2e2
#  endif
Packit eba2e2
# else
Packit eba2e2
_GL_FUNCDECL_SYS (sigaddset, int, (sigset_t *set, int sig)
Packit eba2e2
                                  _GL_ARG_NONNULL ((1)));
Packit eba2e2
# endif
Packit eba2e2
_GL_CXXALIAS_SYS (sigaddset, int, (sigset_t *set, int sig));
Packit eba2e2
_GL_CXXALIASWARN (sigaddset);
Packit eba2e2
Packit eba2e2
/* Remove a signal from a signal set.  */
Packit eba2e2
# if @HAVE_POSIX_SIGNALBLOCKING@
Packit eba2e2
/* This function is defined as a macro on Mac OS X.  */
Packit eba2e2
#  if defined __cplusplus && defined GNULIB_NAMESPACE
Packit eba2e2
#   undef sigdelset
Packit eba2e2
#  endif
Packit eba2e2
# else
Packit eba2e2
_GL_FUNCDECL_SYS (sigdelset, int, (sigset_t *set, int sig)
Packit eba2e2
                                  _GL_ARG_NONNULL ((1)));
Packit eba2e2
# endif
Packit eba2e2
_GL_CXXALIAS_SYS (sigdelset, int, (sigset_t *set, int sig));
Packit eba2e2
_GL_CXXALIASWARN (sigdelset);
Packit eba2e2
Packit eba2e2
/* Fill a signal set with all possible signals.  */
Packit eba2e2
# if @HAVE_POSIX_SIGNALBLOCKING@
Packit eba2e2
/* This function is defined as a macro on Mac OS X.  */
Packit eba2e2
#  if defined __cplusplus && defined GNULIB_NAMESPACE
Packit eba2e2
#   undef sigfillset
Packit eba2e2
#  endif
Packit eba2e2
# else
Packit eba2e2
_GL_FUNCDECL_SYS (sigfillset, int, (sigset_t *set) _GL_ARG_NONNULL ((1)));
Packit eba2e2
# endif
Packit eba2e2
_GL_CXXALIAS_SYS (sigfillset, int, (sigset_t *set));
Packit eba2e2
_GL_CXXALIASWARN (sigfillset);
Packit eba2e2
Packit eba2e2
/* Return the set of those blocked signals that are pending.  */
Packit eba2e2
# if !@HAVE_POSIX_SIGNALBLOCKING@
Packit eba2e2
_GL_FUNCDECL_SYS (sigpending, int, (sigset_t *set) _GL_ARG_NONNULL ((1)));
Packit eba2e2
# endif
Packit eba2e2
_GL_CXXALIAS_SYS (sigpending, int, (sigset_t *set));
Packit eba2e2
_GL_CXXALIASWARN (sigpending);
Packit eba2e2
Packit eba2e2
/* If OLD_SET is not NULL, put the current set of blocked signals in *OLD_SET.
Packit eba2e2
   Then, if SET is not NULL, affect the current set of blocked signals by
Packit eba2e2
   combining it with *SET as indicated in OPERATION.
Packit eba2e2
   In this implementation, you are not allowed to change a signal handler
Packit eba2e2
   while the signal is blocked.  */
Packit eba2e2
# if !@HAVE_POSIX_SIGNALBLOCKING@
Packit eba2e2
#  define SIG_BLOCK   0  /* blocked_set = blocked_set | *set; */
Packit eba2e2
#  define SIG_SETMASK 1  /* blocked_set = *set; */
Packit eba2e2
#  define SIG_UNBLOCK 2  /* blocked_set = blocked_set & ~*set; */
Packit eba2e2
_GL_FUNCDECL_SYS (sigprocmask, int,
Packit eba2e2
                  (int operation, const sigset_t *set, sigset_t *old_set));
Packit eba2e2
# endif
Packit eba2e2
_GL_CXXALIAS_SYS (sigprocmask, int,
Packit eba2e2
                  (int operation, const sigset_t *set, sigset_t *old_set));
Packit eba2e2
_GL_CXXALIASWARN (sigprocmask);
Packit eba2e2
Packit eba2e2
/* Install the handler FUNC for signal SIG, and return the previous
Packit eba2e2
   handler.  */
Packit eba2e2
# ifdef __cplusplus
Packit eba2e2
extern "C" {
Packit eba2e2
# endif
Packit eba2e2
# if !GNULIB_defined_function_taking_int_returning_void_t
Packit eba2e2
typedef void (*_gl_function_taking_int_returning_void_t) (int);
Packit eba2e2
#  define GNULIB_defined_function_taking_int_returning_void_t 1
Packit eba2e2
# endif
Packit eba2e2
# ifdef __cplusplus
Packit eba2e2
}
Packit eba2e2
# endif
Packit eba2e2
# if !@HAVE_POSIX_SIGNALBLOCKING@
Packit eba2e2
#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
Packit eba2e2
#   define signal rpl_signal
Packit eba2e2
#  endif
Packit eba2e2
_GL_FUNCDECL_RPL (signal, _gl_function_taking_int_returning_void_t,
Packit eba2e2
                  (int sig, _gl_function_taking_int_returning_void_t func));
Packit eba2e2
_GL_CXXALIAS_RPL (signal, _gl_function_taking_int_returning_void_t,
Packit eba2e2
                  (int sig, _gl_function_taking_int_returning_void_t func));
Packit eba2e2
# else
Packit eba2e2
_GL_CXXALIAS_SYS (signal, _gl_function_taking_int_returning_void_t,
Packit eba2e2
                  (int sig, _gl_function_taking_int_returning_void_t func));
Packit eba2e2
# endif
Packit eba2e2
_GL_CXXALIASWARN (signal);
Packit eba2e2
Packit eba2e2
# if !@HAVE_POSIX_SIGNALBLOCKING@ && GNULIB_defined_SIGPIPE
Packit eba2e2
/* Raise signal SIGPIPE.  */
Packit eba2e2
_GL_EXTERN_C int _gl_raise_SIGPIPE (void);
Packit eba2e2
# endif
Packit eba2e2
Packit eba2e2
#elif defined GNULIB_POSIXCHECK
Packit eba2e2
# undef sigaddset
Packit eba2e2
# if HAVE_RAW_DECL_SIGADDSET
Packit eba2e2
_GL_WARN_ON_USE (sigaddset, "sigaddset is unportable - "
Packit eba2e2
                 "use the gnulib module sigprocmask for portability");
Packit eba2e2
# endif
Packit eba2e2
# undef sigdelset
Packit eba2e2
# if HAVE_RAW_DECL_SIGDELSET
Packit eba2e2
_GL_WARN_ON_USE (sigdelset, "sigdelset is unportable - "
Packit eba2e2
                 "use the gnulib module sigprocmask for portability");
Packit eba2e2
# endif
Packit eba2e2
# undef sigemptyset
Packit eba2e2
# if HAVE_RAW_DECL_SIGEMPTYSET
Packit eba2e2
_GL_WARN_ON_USE (sigemptyset, "sigemptyset is unportable - "
Packit eba2e2
                 "use the gnulib module sigprocmask for portability");
Packit eba2e2
# endif
Packit eba2e2
# undef sigfillset
Packit eba2e2
# if HAVE_RAW_DECL_SIGFILLSET
Packit eba2e2
_GL_WARN_ON_USE (sigfillset, "sigfillset is unportable - "
Packit eba2e2
                 "use the gnulib module sigprocmask for portability");
Packit eba2e2
# endif
Packit eba2e2
# undef sigismember
Packit eba2e2
# if HAVE_RAW_DECL_SIGISMEMBER
Packit eba2e2
_GL_WARN_ON_USE (sigismember, "sigismember is unportable - "
Packit eba2e2
                 "use the gnulib module sigprocmask for portability");
Packit eba2e2
# endif
Packit eba2e2
# undef sigpending
Packit eba2e2
# if HAVE_RAW_DECL_SIGPENDING
Packit eba2e2
_GL_WARN_ON_USE (sigpending, "sigpending is unportable - "
Packit eba2e2
                 "use the gnulib module sigprocmask for portability");
Packit eba2e2
# endif
Packit eba2e2
# undef sigprocmask
Packit eba2e2
# if HAVE_RAW_DECL_SIGPROCMASK
Packit eba2e2
_GL_WARN_ON_USE (sigprocmask, "sigprocmask is unportable - "
Packit eba2e2
                 "use the gnulib module sigprocmask for portability");
Packit eba2e2
# endif
Packit eba2e2
#endif /* @GNULIB_SIGPROCMASK@ */
Packit eba2e2
Packit eba2e2
Packit eba2e2
#if @GNULIB_SIGACTION@
Packit eba2e2
# if !@HAVE_SIGACTION@
Packit eba2e2
Packit eba2e2
#  if !@HAVE_SIGINFO_T@
Packit eba2e2
Packit eba2e2
#   if !GNULIB_defined_siginfo_types
Packit eba2e2
Packit eba2e2
/* Present to allow compilation, but unsupported by gnulib.  */
Packit eba2e2
union sigval
Packit eba2e2
{
Packit eba2e2
  int sival_int;
Packit eba2e2
  void *sival_ptr;
Packit eba2e2
};
Packit eba2e2
Packit eba2e2
/* Present to allow compilation, but unsupported by gnulib.  */
Packit eba2e2
struct siginfo_t
Packit eba2e2
{
Packit eba2e2
  int si_signo;
Packit eba2e2
  int si_code;
Packit eba2e2
  int si_errno;
Packit eba2e2
  pid_t si_pid;
Packit eba2e2
  uid_t si_uid;
Packit eba2e2
  void *si_addr;
Packit eba2e2
  int si_status;
Packit eba2e2
  long si_band;
Packit eba2e2
  union sigval si_value;
Packit eba2e2
};
Packit eba2e2
typedef struct siginfo_t siginfo_t;
Packit eba2e2
Packit eba2e2
#    define GNULIB_defined_siginfo_types 1
Packit eba2e2
#   endif
Packit eba2e2
Packit eba2e2
#  endif /* !@HAVE_SIGINFO_T@ */
Packit eba2e2
Packit eba2e2
/* We assume that platforms which lack the sigaction() function also lack
Packit eba2e2
   the 'struct sigaction' type, and vice versa.  */
Packit eba2e2
Packit eba2e2
#  if !GNULIB_defined_struct_sigaction
Packit eba2e2
Packit eba2e2
struct sigaction
Packit eba2e2
{
Packit eba2e2
  union
Packit eba2e2
  {
Packit eba2e2
    void (*_sa_handler) (int);
Packit eba2e2
    /* Present to allow compilation, but unsupported by gnulib.  POSIX
Packit eba2e2
       says that implementations may, but not must, make sa_sigaction
Packit eba2e2
       overlap with sa_handler, but we know of no implementation where
Packit eba2e2
       they do not overlap.  */
Packit eba2e2
    void (*_sa_sigaction) (int, siginfo_t *, void *);
Packit eba2e2
  } _sa_func;
Packit eba2e2
  sigset_t sa_mask;
Packit eba2e2
  /* Not all POSIX flags are supported.  */
Packit eba2e2
  int sa_flags;
Packit eba2e2
};
Packit eba2e2
#   define sa_handler _sa_func._sa_handler
Packit eba2e2
#   define sa_sigaction _sa_func._sa_sigaction
Packit eba2e2
/* Unsupported flags are not present.  */
Packit eba2e2
#   define SA_RESETHAND 1
Packit eba2e2
#   define SA_NODEFER 2
Packit eba2e2
#   define SA_RESTART 4
Packit eba2e2
Packit eba2e2
#   define GNULIB_defined_struct_sigaction 1
Packit eba2e2
#  endif
Packit eba2e2
Packit eba2e2
_GL_FUNCDECL_SYS (sigaction, int, (int, const struct sigaction *restrict,
Packit eba2e2
                                   struct sigaction *restrict));
Packit eba2e2
Packit eba2e2
# elif !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@
Packit eba2e2
Packit eba2e2
#  define sa_sigaction sa_handler
Packit eba2e2
Packit eba2e2
# endif /* !@HAVE_SIGACTION@, !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ */
Packit eba2e2
Packit eba2e2
_GL_CXXALIAS_SYS (sigaction, int, (int, const struct sigaction *restrict,
Packit eba2e2
                                   struct sigaction *restrict));
Packit eba2e2
_GL_CXXALIASWARN (sigaction);
Packit eba2e2
Packit eba2e2
#elif defined GNULIB_POSIXCHECK
Packit eba2e2
# undef sigaction
Packit eba2e2
# if HAVE_RAW_DECL_SIGACTION
Packit eba2e2
_GL_WARN_ON_USE (sigaction, "sigaction is unportable - "
Packit eba2e2
                 "use the gnulib module sigaction for portability");
Packit eba2e2
# endif
Packit eba2e2
#endif
Packit eba2e2
Packit eba2e2
/* Some systems don't have SA_NODEFER.  */
Packit eba2e2
#ifndef SA_NODEFER
Packit eba2e2
# define SA_NODEFER 0
Packit eba2e2
#endif
Packit eba2e2
Packit eba2e2
Packit eba2e2
#endif /* _@GUARD_PREFIX@_SIGNAL_H */
Packit eba2e2
#endif /* _@GUARD_PREFIX@_SIGNAL_H */
Packit eba2e2
#endif