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>