Annotation of embedaddon/libiconv/srclib/signal.in.h, revision 1.1.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>