105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* A GNU-like <signal.h>. 205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 305436638acc7c010349a69c3395f1a57c642dc62Ying Wang Copyright (C) 2006-2012 Free Software Foundation, Inc. 405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 505436638acc7c010349a69c3395f1a57c642dc62Ying Wang This program is free software: you can redistribute it and/or modify 605436638acc7c010349a69c3395f1a57c642dc62Ying Wang it under the terms of the GNU General Public License as published by 705436638acc7c010349a69c3395f1a57c642dc62Ying Wang the Free Software Foundation; either version 3 of the License, or 805436638acc7c010349a69c3395f1a57c642dc62Ying Wang (at your option) any later version. 905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1005436638acc7c010349a69c3395f1a57c642dc62Ying Wang This program is distributed in the hope that it will be useful, 1105436638acc7c010349a69c3395f1a57c642dc62Ying Wang but WITHOUT ANY WARRANTY; without even the implied warranty of 1205436638acc7c010349a69c3395f1a57c642dc62Ying Wang MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1305436638acc7c010349a69c3395f1a57c642dc62Ying Wang GNU General Public License for more details. 1405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1505436638acc7c010349a69c3395f1a57c642dc62Ying Wang You should have received a copy of the GNU General Public License 1605436638acc7c010349a69c3395f1a57c642dc62Ying Wang along with this program. If not, see <http://www.gnu.org/licenses/>. */ 1705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if __GNUC__ >= 3 1905436638acc7c010349a69c3395f1a57c642dc62Ying Wang@PRAGMA_SYSTEM_HEADER@ 2005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 2105436638acc7c010349a69c3395f1a57c642dc62Ying Wang@PRAGMA_COLUMNS@ 2205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 2305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined __need_sig_atomic_t || defined __need_sigset_t || defined _GL_ALREADY_INCLUDING_SIGNAL_H || (defined _SIGNAL_H && !defined __SIZEOF_PTHREAD_MUTEX_T) 2405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Special invocation convention: 2505436638acc7c010349a69c3395f1a57c642dc62Ying Wang - Inside glibc header files. 2605436638acc7c010349a69c3395f1a57c642dc62Ying Wang - On glibc systems we have a sequence of nested includes 2705436638acc7c010349a69c3395f1a57c642dc62Ying Wang <signal.h> -> <ucontext.h> -> <signal.h>. 2805436638acc7c010349a69c3395f1a57c642dc62Ying Wang In this situation, the functions are not yet declared, therefore we cannot 2905436638acc7c010349a69c3395f1a57c642dc62Ying Wang provide the C++ aliases. 3005436638acc7c010349a69c3395f1a57c642dc62Ying Wang - On glibc systems with GCC 4.3 we have a sequence of nested includes 3105436638acc7c010349a69c3395f1a57c642dc62Ying Wang <csignal> -> </usr/include/signal.h> -> <sys/ucontext.h> -> <signal.h>. 3205436638acc7c010349a69c3395f1a57c642dc62Ying Wang In this situation, some of the functions are not yet declared, therefore 3305436638acc7c010349a69c3395f1a57c642dc62Ying Wang we cannot provide the C++ aliases. */ 3405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 3505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# @INCLUDE_NEXT@ @NEXT_SIGNAL_H@ 3605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 3705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else 3805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Normal invocation convention. */ 3905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 4005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _@GUARD_PREFIX@_SIGNAL_H 4105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 4205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define _GL_ALREADY_INCLUDING_SIGNAL_H 4305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 4405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Define pid_t, uid_t. 4505436638acc7c010349a69c3395f1a57c642dc62Ying Wang Also, mingw defines sigset_t not in <signal.h>, but in <sys/types.h>. 4605436638acc7c010349a69c3395f1a57c642dc62Ying Wang On Solaris 10, <signal.h> includes <sys/types.h>, which eventually includes 4705436638acc7c010349a69c3395f1a57c642dc62Ying Wang us; so include <sys/types.h> now, before the second inclusion guard. */ 4805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include <sys/types.h> 4905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 5005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The include_next requires a split double-inclusion guard. */ 5105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#@INCLUDE_NEXT@ @NEXT_SIGNAL_H@ 5205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 5305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#undef _GL_ALREADY_INCLUDING_SIGNAL_H 5405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 5505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _@GUARD_PREFIX@_SIGNAL_H 5605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define _@GUARD_PREFIX@_SIGNAL_H 5705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 5805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Mac OS X 10.3, FreeBSD 6.4, OpenBSD 3.8, OSF/1 4.0, Solaris 2.6 declare 5905436638acc7c010349a69c3395f1a57c642dc62Ying Wang pthread_sigmask in <pthread.h>, not in <signal.h>. 6005436638acc7c010349a69c3395f1a57c642dc62Ying Wang But avoid namespace pollution on glibc systems.*/ 6105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if (@GNULIB_PTHREAD_SIGMASK@ || defined GNULIB_POSIXCHECK) \ 6205436638acc7c010349a69c3395f1a57c642dc62Ying Wang && ((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __OpenBSD__ || defined __osf__ || defined __sun) \ 6305436638acc7c010349a69c3395f1a57c642dc62Ying Wang && ! defined __GLIBC__ 6405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# include <pthread.h> 6505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 6605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 6705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ 6805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 6905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The definition of _GL_ARG_NONNULL is copied here. */ 7005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 7105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The definition of _GL_WARN_ON_USE is copied here. */ 7205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 7305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* On AIX, sig_atomic_t already includes volatile. C99 requires that 7405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 'volatile sig_atomic_t' ignore the extra modifier, but C89 did not. 7505436638acc7c010349a69c3395f1a57c642dc62Ying Wang Hence, redefine this to a non-volatile type as needed. */ 7605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if ! @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ 7705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !GNULIB_defined_sig_atomic_t 7805436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef int rpl_sig_atomic_t; 7905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef sig_atomic_t 8005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define sig_atomic_t rpl_sig_atomic_t 8105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define GNULIB_defined_sig_atomic_t 1 8205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 8305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 8405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 8505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* A set or mask of signals. */ 8605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !@HAVE_SIGSET_T@ 8705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !GNULIB_defined_sigset_t 8805436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef unsigned int sigset_t; 8905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define GNULIB_defined_sigset_t 1 9005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 9105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 9205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 9305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Define sighandler_t, the type of signal handlers. A GNU extension. */ 9405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !@HAVE_SIGHANDLER_T@ 9505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef __cplusplus 9605436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern "C" { 9705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 9805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !GNULIB_defined_sighandler_t 9905436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef void (*sighandler_t) (int); 10005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define GNULIB_defined_sighandler_t 1 10105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 10205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef __cplusplus 10305436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 10405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 10505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 10605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 10705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 10805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_SIGNAL_H_SIGPIPE@ 10905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifndef SIGPIPE 11005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Define SIGPIPE to a value that does not overlap with other signals. */ 11105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define SIGPIPE 13 11205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define GNULIB_defined_SIGPIPE 1 11305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* To actually use SIGPIPE, you also need the gnulib modules 'sigprocmask', 11405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 'write', 'stdio'. */ 11505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 11605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 11705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 11805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 11905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Maximum signal number + 1. */ 12005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef NSIG 12105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined __TANDEM 12205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define NSIG 32 12305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 12405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 12505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 12605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 12705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_PTHREAD_SIGMASK@ 12805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_PTHREAD_SIGMASK@ 12905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 13005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef pthread_sigmask 13105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define pthread_sigmask rpl_pthread_sigmask 13205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 13305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (pthread_sigmask, int, 13405436638acc7c010349a69c3395f1a57c642dc62Ying Wang (int how, const sigset_t *new_mask, sigset_t *old_mask)); 13505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (pthread_sigmask, int, 13605436638acc7c010349a69c3395f1a57c642dc62Ying Wang (int how, const sigset_t *new_mask, sigset_t *old_mask)); 13705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 13805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_PTHREAD_SIGMASK@ 13905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (pthread_sigmask, int, 14005436638acc7c010349a69c3395f1a57c642dc62Ying Wang (int how, const sigset_t *new_mask, sigset_t *old_mask)); 14105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 14205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (pthread_sigmask, int, 14305436638acc7c010349a69c3395f1a57c642dc62Ying Wang (int how, const sigset_t *new_mask, sigset_t *old_mask)); 14405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 14505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (pthread_sigmask); 14605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 14705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef pthread_sigmask 14805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_PTHREAD_SIGMASK 14905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (pthread_sigmask, "pthread_sigmask is not portable - " 15005436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use gnulib module pthread_sigmask for portability"); 15105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 15205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 15305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 15405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 15505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_RAISE@ 15605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_RAISE@ 15705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 15805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef raise 15905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define raise rpl_raise 16005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 16105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (raise, int, (int sig)); 16205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (raise, int, (int sig)); 16305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 16405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_RAISE@ 16505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (raise, int, (int sig)); 16605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 16705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (raise, int, (int sig)); 16805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 16905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (raise); 17005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 17105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef raise 17205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Assume raise is always declared. */ 17305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (raise, "raise can crash on native Windows - " 17405436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use gnulib module raise for portability"); 17505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 17605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 17705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 17805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_SIGPROCMASK@ 17905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_POSIX_SIGNALBLOCKING@ 18005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 18105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifndef GNULIB_defined_signal_blocking 18205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define GNULIB_defined_signal_blocking 1 18305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 18405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 18505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Maximum signal number + 1. */ 18605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifndef NSIG 18705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define NSIG 32 18805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 18905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 19005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* This code supports only 32 signals. */ 19105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !GNULIB_defined_verify_NSIG_constraint 19205436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef int verify_NSIG_constraint[NSIG <= 32 ? 1 : -1]; 19305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define GNULIB_defined_verify_NSIG_constraint 1 19405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 19505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 19605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 19705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 19805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Test whether a given signal is contained in a signal set. */ 19905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @HAVE_POSIX_SIGNALBLOCKING@ 20005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* This function is defined as a macro on Mac OS X. */ 20105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined __cplusplus && defined GNULIB_NAMESPACE 20205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef sigismember 20305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 20405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 20505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (sigismember, int, (const sigset_t *set, int sig) 20605436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1))); 20705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 20805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (sigismember, int, (const sigset_t *set, int sig)); 20905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (sigismember); 21005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 21105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Initialize a signal set to the empty set. */ 21205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @HAVE_POSIX_SIGNALBLOCKING@ 21305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* This function is defined as a macro on Mac OS X. */ 21405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined __cplusplus && defined GNULIB_NAMESPACE 21505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef sigemptyset 21605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 21705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 21805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (sigemptyset, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); 21905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 22005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (sigemptyset, int, (sigset_t *set)); 22105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (sigemptyset); 22205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 22305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Add a signal to a signal set. */ 22405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @HAVE_POSIX_SIGNALBLOCKING@ 22505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* This function is defined as a macro on Mac OS X. */ 22605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined __cplusplus && defined GNULIB_NAMESPACE 22705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef sigaddset 22805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 22905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 23005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (sigaddset, int, (sigset_t *set, int sig) 23105436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1))); 23205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 23305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (sigaddset, int, (sigset_t *set, int sig)); 23405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (sigaddset); 23505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 23605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Remove a signal from a signal set. */ 23705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @HAVE_POSIX_SIGNALBLOCKING@ 23805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* This function is defined as a macro on Mac OS X. */ 23905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined __cplusplus && defined GNULIB_NAMESPACE 24005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef sigdelset 24105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 24205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 24305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (sigdelset, int, (sigset_t *set, int sig) 24405436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1))); 24505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 24605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (sigdelset, int, (sigset_t *set, int sig)); 24705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (sigdelset); 24805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 24905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Fill a signal set with all possible signals. */ 25005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @HAVE_POSIX_SIGNALBLOCKING@ 25105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* This function is defined as a macro on Mac OS X. */ 25205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined __cplusplus && defined GNULIB_NAMESPACE 25305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef sigfillset 25405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 25505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 25605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (sigfillset, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); 25705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 25805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (sigfillset, int, (sigset_t *set)); 25905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (sigfillset); 26005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 26105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Return the set of those blocked signals that are pending. */ 26205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_POSIX_SIGNALBLOCKING@ 26305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (sigpending, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); 26405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 26505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (sigpending, int, (sigset_t *set)); 26605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (sigpending); 26705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 26805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* If OLD_SET is not NULL, put the current set of blocked signals in *OLD_SET. 26905436638acc7c010349a69c3395f1a57c642dc62Ying Wang Then, if SET is not NULL, affect the current set of blocked signals by 27005436638acc7c010349a69c3395f1a57c642dc62Ying Wang combining it with *SET as indicated in OPERATION. 27105436638acc7c010349a69c3395f1a57c642dc62Ying Wang In this implementation, you are not allowed to change a signal handler 27205436638acc7c010349a69c3395f1a57c642dc62Ying Wang while the signal is blocked. */ 27305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_POSIX_SIGNALBLOCKING@ 27405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define SIG_BLOCK 0 /* blocked_set = blocked_set | *set; */ 27505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define SIG_SETMASK 1 /* blocked_set = *set; */ 27605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define SIG_UNBLOCK 2 /* blocked_set = blocked_set & ~*set; */ 27705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (sigprocmask, int, 27805436638acc7c010349a69c3395f1a57c642dc62Ying Wang (int operation, const sigset_t *set, sigset_t *old_set)); 27905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 28005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (sigprocmask, int, 28105436638acc7c010349a69c3395f1a57c642dc62Ying Wang (int operation, const sigset_t *set, sigset_t *old_set)); 28205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (sigprocmask); 28305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 28405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Install the handler FUNC for signal SIG, and return the previous 28505436638acc7c010349a69c3395f1a57c642dc62Ying Wang handler. */ 28605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef __cplusplus 28705436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern "C" { 28805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 28905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !GNULIB_defined_function_taking_int_returning_void_t 29005436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef void (*_gl_function_taking_int_returning_void_t) (int); 29105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define GNULIB_defined_function_taking_int_returning_void_t 1 29205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 29305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef __cplusplus 29405436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 29505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 29605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_POSIX_SIGNALBLOCKING@ 29705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 29805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define signal rpl_signal 29905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 30005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (signal, _gl_function_taking_int_returning_void_t, 30105436638acc7c010349a69c3395f1a57c642dc62Ying Wang (int sig, _gl_function_taking_int_returning_void_t func)); 30205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (signal, _gl_function_taking_int_returning_void_t, 30305436638acc7c010349a69c3395f1a57c642dc62Ying Wang (int sig, _gl_function_taking_int_returning_void_t func)); 30405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 30505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (signal, _gl_function_taking_int_returning_void_t, 30605436638acc7c010349a69c3395f1a57c642dc62Ying Wang (int sig, _gl_function_taking_int_returning_void_t func)); 30705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 30805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (signal); 30905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 31005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_POSIX_SIGNALBLOCKING@ && GNULIB_defined_SIGPIPE 31105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Raise signal SIGPIPE. */ 31205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_EXTERN_C int _gl_raise_SIGPIPE (void); 31305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 31405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 31505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 31605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef sigaddset 31705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_SIGADDSET 31805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (sigaddset, "sigaddset is unportable - " 31905436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use the gnulib module sigprocmask for portability"); 32005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 32105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef sigdelset 32205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_SIGDELSET 32305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (sigdelset, "sigdelset is unportable - " 32405436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use the gnulib module sigprocmask for portability"); 32505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 32605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef sigemptyset 32705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_SIGEMPTYSET 32805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (sigemptyset, "sigemptyset is unportable - " 32905436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use the gnulib module sigprocmask for portability"); 33005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 33105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef sigfillset 33205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_SIGFILLSET 33305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (sigfillset, "sigfillset is unportable - " 33405436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use the gnulib module sigprocmask for portability"); 33505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 33605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef sigismember 33705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_SIGISMEMBER 33805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (sigismember, "sigismember is unportable - " 33905436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use the gnulib module sigprocmask for portability"); 34005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 34105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef sigpending 34205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_SIGPENDING 34305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (sigpending, "sigpending is unportable - " 34405436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use the gnulib module sigprocmask for portability"); 34505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 34605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef sigprocmask 34705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_SIGPROCMASK 34805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (sigprocmask, "sigprocmask is unportable - " 34905436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use the gnulib module sigprocmask for portability"); 35005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 35105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* @GNULIB_SIGPROCMASK@ */ 35205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 35305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 35405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_SIGACTION@ 35505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_SIGACTION@ 35605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 35705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_SIGINFO_T@ 35805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 35905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !GNULIB_defined_siginfo_types 36005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 36105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Present to allow compilation, but unsupported by gnulib. */ 36205436638acc7c010349a69c3395f1a57c642dc62Ying Wangunion sigval 36305436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 36405436638acc7c010349a69c3395f1a57c642dc62Ying Wang int sival_int; 36505436638acc7c010349a69c3395f1a57c642dc62Ying Wang void *sival_ptr; 36605436638acc7c010349a69c3395f1a57c642dc62Ying Wang}; 36705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 36805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Present to allow compilation, but unsupported by gnulib. */ 36905436638acc7c010349a69c3395f1a57c642dc62Ying Wangstruct siginfo_t 37005436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 37105436638acc7c010349a69c3395f1a57c642dc62Ying Wang int si_signo; 37205436638acc7c010349a69c3395f1a57c642dc62Ying Wang int si_code; 37305436638acc7c010349a69c3395f1a57c642dc62Ying Wang int si_errno; 37405436638acc7c010349a69c3395f1a57c642dc62Ying Wang pid_t si_pid; 37505436638acc7c010349a69c3395f1a57c642dc62Ying Wang uid_t si_uid; 37605436638acc7c010349a69c3395f1a57c642dc62Ying Wang void *si_addr; 37705436638acc7c010349a69c3395f1a57c642dc62Ying Wang int si_status; 37805436638acc7c010349a69c3395f1a57c642dc62Ying Wang long si_band; 37905436638acc7c010349a69c3395f1a57c642dc62Ying Wang union sigval si_value; 38005436638acc7c010349a69c3395f1a57c642dc62Ying Wang}; 38105436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef struct siginfo_t siginfo_t; 38205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 38305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define GNULIB_defined_siginfo_types 1 38405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 38505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 38605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif /* !@HAVE_SIGINFO_T@ */ 38705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 38805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* We assume that platforms which lack the sigaction() function also lack 38905436638acc7c010349a69c3395f1a57c642dc62Ying Wang the 'struct sigaction' type, and vice versa. */ 39005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 39105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !GNULIB_defined_struct_sigaction 39205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 39305436638acc7c010349a69c3395f1a57c642dc62Ying Wangstruct sigaction 39405436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 39505436638acc7c010349a69c3395f1a57c642dc62Ying Wang union 39605436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 39705436638acc7c010349a69c3395f1a57c642dc62Ying Wang void (*_sa_handler) (int); 39805436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Present to allow compilation, but unsupported by gnulib. POSIX 39905436638acc7c010349a69c3395f1a57c642dc62Ying Wang says that implementations may, but not must, make sa_sigaction 40005436638acc7c010349a69c3395f1a57c642dc62Ying Wang overlap with sa_handler, but we know of no implementation where 40105436638acc7c010349a69c3395f1a57c642dc62Ying Wang they do not overlap. */ 40205436638acc7c010349a69c3395f1a57c642dc62Ying Wang void (*_sa_sigaction) (int, siginfo_t *, void *); 40305436638acc7c010349a69c3395f1a57c642dc62Ying Wang } _sa_func; 40405436638acc7c010349a69c3395f1a57c642dc62Ying Wang sigset_t sa_mask; 40505436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* Not all POSIX flags are supported. */ 40605436638acc7c010349a69c3395f1a57c642dc62Ying Wang int sa_flags; 40705436638acc7c010349a69c3395f1a57c642dc62Ying Wang}; 40805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define sa_handler _sa_func._sa_handler 40905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define sa_sigaction _sa_func._sa_sigaction 41005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Unsupported flags are not present. */ 41105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define SA_RESETHAND 1 41205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define SA_NODEFER 2 41305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define SA_RESTART 4 41405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 41505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define GNULIB_defined_struct_sigaction 1 41605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 41705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 41805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (sigaction, int, (int, const struct sigaction *restrict, 41905436638acc7c010349a69c3395f1a57c642dc62Ying Wang struct sigaction *restrict)); 42005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 42105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# elif !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ 42205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 42305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define sa_sigaction sa_handler 42405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 42505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif /* !@HAVE_SIGACTION@, !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ */ 42605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 42705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (sigaction, int, (int, const struct sigaction *restrict, 42805436638acc7c010349a69c3395f1a57c642dc62Ying Wang struct sigaction *restrict)); 42905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (sigaction); 43005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 43105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 43205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef sigaction 43305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_SIGACTION 43405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (sigaction, "sigaction is unportable - " 43505436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use the gnulib module sigaction for portability"); 43605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 43705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 43805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 43905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Some systems don't have SA_NODEFER. */ 44005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef SA_NODEFER 44105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define SA_NODEFER 0 44205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 44305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 44405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 44505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* _@GUARD_PREFIX@_SIGNAL_H */ 44605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* _@GUARD_PREFIX@_SIGNAL_H */ 44705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 448