Annotation of embedaddon/libiconv/srclib/signal.in.h, revision 1.1

1.1     ! misho       1: /* A GNU-like <signal.h>.
        !             2: 
        !             3:    Copyright (C) 2006-2009 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: #if __GNUC__ >= 3
        !            19: @PRAGMA_SYSTEM_HEADER@
        !            20: #endif
        !            21: 
        !            22: #if defined __need_sig_atomic_t || defined __need_sigset_t
        !            23: /* Special invocation convention inside glibc header files.  */
        !            24: 
        !            25: # @INCLUDE_NEXT@ @NEXT_SIGNAL_H@
        !            26: 
        !            27: #else
        !            28: /* Normal invocation convention.  */
        !            29: 
        !            30: #ifndef _GL_SIGNAL_H
        !            31: 
        !            32: /* The include_next requires a split double-inclusion guard.  */
        !            33: #@INCLUDE_NEXT@ @NEXT_SIGNAL_H@
        !            34: 
        !            35: #ifndef _GL_SIGNAL_H
        !            36: #define _GL_SIGNAL_H
        !            37: 
        !            38: /* The definition of GL_LINK_WARNING is copied here.  */
        !            39: 
        !            40: /* Define pid_t, uid_t.
        !            41:    Also, mingw defines sigset_t not in <signal.h>, but in <sys/types.h>.  */
        !            42: #include <sys/types.h>
        !            43: 
        !            44: /* On AIX, sig_atomic_t already includes volatile.  C99 requires that
        !            45:    'volatile sig_atomic_t' ignore the extra modifier, but C89 did not.
        !            46:    Hence, redefine this to a non-volatile type as needed.  */
        !            47: #if ! @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
        !            48: typedef int rpl_sig_atomic_t;
        !            49: # undef sig_atomic_t
        !            50: # define sig_atomic_t rpl_sig_atomic_t
        !            51: #endif
        !            52: 
        !            53: #ifdef __cplusplus
        !            54: extern "C" {
        !            55: #endif
        !            56: 
        !            57: 
        !            58: #if @GNULIB_SIGNAL_H_SIGPIPE@
        !            59: # ifndef SIGPIPE
        !            60: /* Define SIGPIPE to a value that does not overlap with other signals.  */
        !            61: #  define SIGPIPE 13
        !            62: #  define GNULIB_defined_SIGPIPE 1
        !            63: /* To actually use SIGPIPE, you also need the gnulib modules 'sigprocmask',
        !            64:    'write', 'stdio'.  */
        !            65: # endif
        !            66: #endif
        !            67: 
        !            68: 
        !            69: #if !@HAVE_POSIX_SIGNALBLOCKING@
        !            70: 
        !            71: /* Maximum signal number + 1.  */
        !            72: # ifndef NSIG
        !            73: #  define NSIG 32
        !            74: # endif
        !            75: 
        !            76: /* This code supports only 32 signals.  */
        !            77: typedef int verify_NSIG_constraint[2 * (NSIG <= 32) - 1];
        !            78: 
        !            79: /* A set or mask of signals.  */
        !            80: # if !@HAVE_SIGSET_T@
        !            81: typedef unsigned int sigset_t;
        !            82: # endif
        !            83: 
        !            84: /* Test whether a given signal is contained in a signal set.  */
        !            85: extern int sigismember (const sigset_t *set, int sig);
        !            86: 
        !            87: /* Initialize a signal set to the empty set.  */
        !            88: extern int sigemptyset (sigset_t *set);
        !            89: 
        !            90: /* Add a signal to a signal set.  */
        !            91: extern int sigaddset (sigset_t *set, int sig);
        !            92: 
        !            93: /* Remove a signal from a signal set.  */
        !            94: extern int sigdelset (sigset_t *set, int sig);
        !            95: 
        !            96: /* Fill a signal set with all possible signals.  */
        !            97: extern int sigfillset (sigset_t *set);
        !            98: 
        !            99: /* Return the set of those blocked signals that are pending.  */
        !           100: extern int sigpending (sigset_t *set);
        !           101: 
        !           102: /* If OLD_SET is not NULL, put the current set of blocked signals in *OLD_SET.
        !           103:    Then, if SET is not NULL, affect the current set of blocked signals by
        !           104:    combining it with *SET as indicated in OPERATION.
        !           105:    In this implementation, you are not allowed to change a signal handler
        !           106:    while the signal is blocked.  */
        !           107: # define SIG_BLOCK   0  /* blocked_set = blocked_set | *set; */
        !           108: # define SIG_SETMASK 1  /* blocked_set = *set; */
        !           109: # define SIG_UNBLOCK 2  /* blocked_set = blocked_set & ~*set; */
        !           110: extern int sigprocmask (int operation, const sigset_t *set, sigset_t *old_set);
        !           111: 
        !           112: # define signal rpl_signal
        !           113: /* Install the handler FUNC for signal SIG, and return the previous
        !           114:    handler.  */
        !           115: extern void (*signal (int sig, void (*func) (int))) (int);
        !           116: 
        !           117: # if GNULIB_defined_SIGPIPE
        !           118: 
        !           119: /* Raise signal SIG.  */
        !           120: #  undef raise
        !           121: #  define raise rpl_raise
        !           122: extern int raise (int sig);
        !           123: 
        !           124: # endif
        !           125: 
        !           126: #endif /* !@HAVE_POSIX_SIGNALBLOCKING@ */
        !           127: 
        !           128: 
        !           129: #if !@HAVE_SIGACTION@
        !           130: 
        !           131: # if !@HAVE_SIGINFO_T@
        !           132: /* Present to allow compilation, but unsupported by gnulib.  */
        !           133: union sigval
        !           134: {
        !           135:   int sival_int;
        !           136:   void *sival_ptr;
        !           137: };
        !           138: 
        !           139: /* Present to allow compilation, but unsupported by gnulib.  */
        !           140: struct siginfo_t
        !           141: {
        !           142:   int si_signo;
        !           143:   int si_code;
        !           144:   int si_errno;
        !           145:   pid_t si_pid;
        !           146:   uid_t si_uid;
        !           147:   void *si_addr;
        !           148:   int si_status;
        !           149:   long si_band;
        !           150:   union sigval si_value;
        !           151: };
        !           152: typedef struct siginfo_t siginfo_t;
        !           153: # endif /* !@HAVE_SIGINFO_T@ */
        !           154: 
        !           155: /* We assume that platforms which lack the sigaction() function also lack
        !           156:    the 'struct sigaction' type, and vice versa.  */
        !           157: 
        !           158: struct sigaction
        !           159: {
        !           160:   union
        !           161:   {
        !           162:     void (*_sa_handler) (int);
        !           163:     /* Present to allow compilation, but unsupported by gnulib.  POSIX
        !           164:        says that implementations may, but not must, make sa_sigaction
        !           165:        overlap with sa_handler, but we know of no implementation where
        !           166:        they do not overlap.  */
        !           167:     void (*_sa_sigaction) (int, siginfo_t *, void *);
        !           168:   } _sa_func;
        !           169:   sigset_t sa_mask;
        !           170:   /* Not all POSIX flags are supported.  */
        !           171:   int sa_flags;
        !           172: };
        !           173: # define sa_handler _sa_func._sa_handler
        !           174: # define sa_sigaction _sa_func._sa_sigaction
        !           175: /* Unsupported flags are not present.  */
        !           176: # define SA_RESETHAND 1
        !           177: # define SA_NODEFER 2
        !           178: # define SA_RESTART 4
        !           179: 
        !           180: extern int sigaction (int, const struct sigaction *restrict,
        !           181:                       struct sigaction *restrict);
        !           182: 
        !           183: #elif !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@
        !           184: 
        !           185: # define sa_sigaction sa_handler
        !           186: 
        !           187: #endif /* !@HAVE_SIGACTION@, !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ */
        !           188: 
        !           189: 
        !           190: /* Some systems don't have SA_NODEFER.  */
        !           191: #ifndef SA_NODEFER
        !           192: # define SA_NODEFER 0
        !           193: #endif
        !           194: 
        !           195: 
        !           196: #ifdef __cplusplus
        !           197: }
        !           198: #endif
        !           199: 
        !           200: #endif /* _GL_SIGNAL_H */
        !           201: #endif /* _GL_SIGNAL_H */
        !           202: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>