Mercurial > hg > octave-jordi > gnulib-hg
annotate lib/signal.in.h @ 11424:2b94c0e7849d
signal.h: always support 'volatile sig_atomic_t'
* m4/signal_h.m4 (gl_SIGNAL_H): Check for AIX limitation.
(gl_SIGNAL_H_DEFAULTS): Add a default.
* modules/signal (Makefile.am): Substitute if needed.
* lib/signal.in.h (sig_atomic_t): Redefine if needed, so that
users can blindly add volatile.
* doc/posix-headers/signal.texi (signal.h): Document it.
Reported by Matthew Woehlke.
Signed-off-by: Eric Blake <ebb9@byu.net>
author | Eric Blake <ebb9@byu.net> |
---|---|
date | Sat, 21 Mar 2009 17:57:40 -0600 |
parents | 5a35e8f56744 |
children | f7842310a565 |
rev | line source |
---|---|
9259
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
1 /* A GNU-like <signal.h>. |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
2 |
11424
2b94c0e7849d
signal.h: always support 'volatile sig_atomic_t'
Eric Blake <ebb9@byu.net>
parents:
10706
diff
changeset
|
3 Copyright (C) 2006-2009 Free Software Foundation, Inc. |
9259
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
4 |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
9259
diff
changeset
|
5 This program is free software: you can redistribute it and/or modify |
9259
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
6 it under the terms of the GNU General Public License as published by |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
9259
diff
changeset
|
7 the Free Software Foundation; either version 3 of the License, or |
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
9259
diff
changeset
|
8 (at your option) any later version. |
9259
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
9 |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
10 This program is distributed in the hope that it will be useful, |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
13 GNU General Public License for more details. |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
14 |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
15 You should have received a copy of the GNU General Public License |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
9259
diff
changeset
|
16 along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
9259
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
17 |
10655
8668b19a7032
Avoid gcc warnings because of #pragma GCC system_header on older gcc.
Bruno Haible <bruno@clisp.org>
parents:
10483
diff
changeset
|
18 #if __GNUC__ >= 3 |
10375
f96e845fc36d
Avoid some "gcc -pedantic" warnings.
Bruno Haible <bruno@clisp.org>
parents:
10321
diff
changeset
|
19 @PRAGMA_SYSTEM_HEADER@ |
10655
8668b19a7032
Avoid gcc warnings because of #pragma GCC system_header on older gcc.
Bruno Haible <bruno@clisp.org>
parents:
10483
diff
changeset
|
20 #endif |
10375
f96e845fc36d
Avoid some "gcc -pedantic" warnings.
Bruno Haible <bruno@clisp.org>
parents:
10321
diff
changeset
|
21 |
9259
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
22 #if defined __need_sig_atomic_t || defined __need_sigset_t |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
23 /* Special invocation convention inside glibc header files. */ |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
24 |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
25 # @INCLUDE_NEXT@ @NEXT_SIGNAL_H@ |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
26 |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
27 #else |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
28 /* Normal invocation convention. */ |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
29 |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
30 #ifndef _GL_SIGNAL_H |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
31 |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
32 /* The include_next requires a split double-inclusion guard. */ |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
33 #@INCLUDE_NEXT@ @NEXT_SIGNAL_H@ |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
34 |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
35 #ifndef _GL_SIGNAL_H |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
36 #define _GL_SIGNAL_H |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
37 |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
38 /* The definition of GL_LINK_WARNING is copied here. */ |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
39 |
10235 | 40 /* Define pid_t, uid_t. |
41 Also, mingw defines sigset_t not in <signal.h>, but in <sys/types.h>. */ | |
10229
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
42 #include <sys/types.h> |
9259
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
43 |
11424
2b94c0e7849d
signal.h: always support 'volatile sig_atomic_t'
Eric Blake <ebb9@byu.net>
parents:
10706
diff
changeset
|
44 /* On AIX, sig_atomic_t already includes volatile. C99 requires that |
2b94c0e7849d
signal.h: always support 'volatile sig_atomic_t'
Eric Blake <ebb9@byu.net>
parents:
10706
diff
changeset
|
45 'volatile sig_atomic_t' ignore the extra modifier, but C89 did not. |
2b94c0e7849d
signal.h: always support 'volatile sig_atomic_t'
Eric Blake <ebb9@byu.net>
parents:
10706
diff
changeset
|
46 Hence, redefine this to a non-volatile type as needed. */ |
2b94c0e7849d
signal.h: always support 'volatile sig_atomic_t'
Eric Blake <ebb9@byu.net>
parents:
10706
diff
changeset
|
47 #if ! @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ |
2b94c0e7849d
signal.h: always support 'volatile sig_atomic_t'
Eric Blake <ebb9@byu.net>
parents:
10706
diff
changeset
|
48 typedef int rpl_sig_atomic_t; |
2b94c0e7849d
signal.h: always support 'volatile sig_atomic_t'
Eric Blake <ebb9@byu.net>
parents:
10706
diff
changeset
|
49 # undef sig_atomic_t |
2b94c0e7849d
signal.h: always support 'volatile sig_atomic_t'
Eric Blake <ebb9@byu.net>
parents:
10706
diff
changeset
|
50 # define sig_atomic_t rpl_sig_atomic_t |
2b94c0e7849d
signal.h: always support 'volatile sig_atomic_t'
Eric Blake <ebb9@byu.net>
parents:
10706
diff
changeset
|
51 #endif |
2b94c0e7849d
signal.h: always support 'volatile sig_atomic_t'
Eric Blake <ebb9@byu.net>
parents:
10706
diff
changeset
|
52 |
9259
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
53 #ifdef __cplusplus |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
54 extern "C" { |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
55 #endif |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
56 |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
57 |
10483
5a24031ebf7d
Support signal handling with SIGPIPE on native Windows platforms.
Bruno Haible <bruno@clisp.org>
parents:
10375
diff
changeset
|
58 #if @GNULIB_SIGNAL_H_SIGPIPE@ |
5a24031ebf7d
Support signal handling with SIGPIPE on native Windows platforms.
Bruno Haible <bruno@clisp.org>
parents:
10375
diff
changeset
|
59 # ifndef SIGPIPE |
5a24031ebf7d
Support signal handling with SIGPIPE on native Windows platforms.
Bruno Haible <bruno@clisp.org>
parents:
10375
diff
changeset
|
60 /* Define SIGPIPE to a value that does not overlap with other signals. */ |
5a24031ebf7d
Support signal handling with SIGPIPE on native Windows platforms.
Bruno Haible <bruno@clisp.org>
parents:
10375
diff
changeset
|
61 # define SIGPIPE 13 |
5a24031ebf7d
Support signal handling with SIGPIPE on native Windows platforms.
Bruno Haible <bruno@clisp.org>
parents:
10375
diff
changeset
|
62 # define GNULIB_defined_SIGPIPE 1 |
5a24031ebf7d
Support signal handling with SIGPIPE on native Windows platforms.
Bruno Haible <bruno@clisp.org>
parents:
10375
diff
changeset
|
63 /* To actually use SIGPIPE, you also need the gnulib modules 'sigprocmask', |
5a24031ebf7d
Support signal handling with SIGPIPE on native Windows platforms.
Bruno Haible <bruno@clisp.org>
parents:
10375
diff
changeset
|
64 'write', 'stdio'. */ |
5a24031ebf7d
Support signal handling with SIGPIPE on native Windows platforms.
Bruno Haible <bruno@clisp.org>
parents:
10375
diff
changeset
|
65 # endif |
5a24031ebf7d
Support signal handling with SIGPIPE on native Windows platforms.
Bruno Haible <bruno@clisp.org>
parents:
10375
diff
changeset
|
66 #endif |
5a24031ebf7d
Support signal handling with SIGPIPE on native Windows platforms.
Bruno Haible <bruno@clisp.org>
parents:
10375
diff
changeset
|
67 |
5a24031ebf7d
Support signal handling with SIGPIPE on native Windows platforms.
Bruno Haible <bruno@clisp.org>
parents:
10375
diff
changeset
|
68 |
9259
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
69 #if !@HAVE_POSIX_SIGNALBLOCKING@ |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
70 |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
71 /* Maximum signal number + 1. */ |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
72 # ifndef NSIG |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
73 # define NSIG 32 |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
74 # endif |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
75 |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
76 /* This code supports only 32 signals. */ |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
77 typedef int verify_NSIG_constraint[2 * (NSIG <= 32) - 1]; |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
78 |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
79 /* A set or mask of signals. */ |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
80 # if !@HAVE_SIGSET_T@ |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
81 typedef unsigned int sigset_t; |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
82 # endif |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
83 |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
84 /* Test whether a given signal is contained in a signal set. */ |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
85 extern int sigismember (const sigset_t *set, int sig); |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
86 |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
87 /* Initialize a signal set to the empty set. */ |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
88 extern int sigemptyset (sigset_t *set); |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
89 |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
90 /* Add a signal to a signal set. */ |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
91 extern int sigaddset (sigset_t *set, int sig); |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
92 |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
93 /* Remove a signal from a signal set. */ |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
94 extern int sigdelset (sigset_t *set, int sig); |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
95 |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
96 /* Fill a signal set with all possible signals. */ |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
97 extern int sigfillset (sigset_t *set); |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
98 |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
99 /* Return the set of those blocked signals that are pending. */ |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
100 extern int sigpending (sigset_t *set); |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
101 |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
102 /* If OLD_SET is not NULL, put the current set of blocked signals in *OLD_SET. |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
103 Then, if SET is not NULL, affect the current set of blocked signals by |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
104 combining it with *SET as indicated in OPERATION. |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
105 In this implementation, you are not allowed to change a signal handler |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
106 while the signal is blocked. */ |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
107 # define SIG_BLOCK 0 /* blocked_set = blocked_set | *set; */ |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
108 # define SIG_SETMASK 1 /* blocked_set = *set; */ |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
109 # define SIG_UNBLOCK 2 /* blocked_set = blocked_set & ~*set; */ |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
110 extern int sigprocmask (int operation, const sigset_t *set, sigset_t *old_set); |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
111 |
10228
9b123d1aa781
Improve robustness of sigprocmask by overriding signal.
Eric Blake <ebb9@byu.net>
parents:
9309
diff
changeset
|
112 # define signal rpl_signal |
9b123d1aa781
Improve robustness of sigprocmask by overriding signal.
Eric Blake <ebb9@byu.net>
parents:
9309
diff
changeset
|
113 /* Install the handler FUNC for signal SIG, and return the previous |
9b123d1aa781
Improve robustness of sigprocmask by overriding signal.
Eric Blake <ebb9@byu.net>
parents:
9309
diff
changeset
|
114 handler. */ |
9b123d1aa781
Improve robustness of sigprocmask by overriding signal.
Eric Blake <ebb9@byu.net>
parents:
9309
diff
changeset
|
115 extern void (*signal (int sig, void (*func) (int))) (int); |
9b123d1aa781
Improve robustness of sigprocmask by overriding signal.
Eric Blake <ebb9@byu.net>
parents:
9309
diff
changeset
|
116 |
10483
5a24031ebf7d
Support signal handling with SIGPIPE on native Windows platforms.
Bruno Haible <bruno@clisp.org>
parents:
10375
diff
changeset
|
117 # if GNULIB_defined_SIGPIPE |
5a24031ebf7d
Support signal handling with SIGPIPE on native Windows platforms.
Bruno Haible <bruno@clisp.org>
parents:
10375
diff
changeset
|
118 |
5a24031ebf7d
Support signal handling with SIGPIPE on native Windows platforms.
Bruno Haible <bruno@clisp.org>
parents:
10375
diff
changeset
|
119 /* Raise signal SIG. */ |
5a24031ebf7d
Support signal handling with SIGPIPE on native Windows platforms.
Bruno Haible <bruno@clisp.org>
parents:
10375
diff
changeset
|
120 # undef raise |
5a24031ebf7d
Support signal handling with SIGPIPE on native Windows platforms.
Bruno Haible <bruno@clisp.org>
parents:
10375
diff
changeset
|
121 # define raise rpl_raise |
5a24031ebf7d
Support signal handling with SIGPIPE on native Windows platforms.
Bruno Haible <bruno@clisp.org>
parents:
10375
diff
changeset
|
122 extern int raise (int sig); |
5a24031ebf7d
Support signal handling with SIGPIPE on native Windows platforms.
Bruno Haible <bruno@clisp.org>
parents:
10375
diff
changeset
|
123 |
5a24031ebf7d
Support signal handling with SIGPIPE on native Windows platforms.
Bruno Haible <bruno@clisp.org>
parents:
10375
diff
changeset
|
124 # endif |
5a24031ebf7d
Support signal handling with SIGPIPE on native Windows platforms.
Bruno Haible <bruno@clisp.org>
parents:
10375
diff
changeset
|
125 |
10229
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
126 #endif /* !@HAVE_POSIX_SIGNALBLOCKING@ */ |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
127 |
10483
5a24031ebf7d
Support signal handling with SIGPIPE on native Windows platforms.
Bruno Haible <bruno@clisp.org>
parents:
10375
diff
changeset
|
128 |
10229
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
129 #if !@HAVE_SIGACTION@ |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
130 |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
131 # if !@HAVE_SIGINFO_T@ |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
132 /* Present to allow compilation, but unsupported by gnulib. */ |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
133 union sigval |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
134 { |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
135 int sival_int; |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
136 void *sival_ptr; |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
137 }; |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
138 |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
139 /* Present to allow compilation, but unsupported by gnulib. */ |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
140 struct siginfo_t |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
141 { |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
142 int si_signo; |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
143 int si_code; |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
144 int si_errno; |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
145 pid_t si_pid; |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
146 uid_t si_uid; |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
147 void *si_addr; |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
148 int si_status; |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
149 long si_band; |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
150 union sigval si_value; |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
151 }; |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
152 typedef struct siginfo_t siginfo_t; |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
153 # endif /* !@HAVE_SIGINFO_T@ */ |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
154 |
10243 | 155 /* We assume that platforms which lack the sigaction() function also lack |
156 the 'struct sigaction' type, and vice versa. */ | |
10229
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
157 |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
158 struct sigaction |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
159 { |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
160 union |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
161 { |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
162 void (*_sa_handler) (int); |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
163 /* Present to allow compilation, but unsupported by gnulib. POSIX |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
164 says that implementations may, but not must, make sa_sigaction |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
165 overlap with sa_handler, but we know of no implementation where |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
166 they do not overlap. */ |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
167 void (*_sa_sigaction) (int, siginfo_t *, void *); |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
168 } _sa_func; |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
169 sigset_t sa_mask; |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
170 /* Not all POSIX flags are supported. */ |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
171 int sa_flags; |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
172 }; |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
173 # define sa_handler _sa_func._sa_handler |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
174 # define sa_sigaction _sa_func._sa_sigaction |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
175 /* Unsupported flags are not present. */ |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
176 # define SA_RESETHAND 1 |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
177 # define SA_NODEFER 2 |
10236
d7f97416cbe1
Define SA_RESTART also for mingw.
Bruno Haible <bruno@clisp.org>
parents:
10235
diff
changeset
|
178 # define SA_RESTART 4 |
10229
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
179 |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
180 extern int sigaction (int, const struct sigaction *restrict, |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
181 struct sigaction *restrict); |
29502a2dd08a
New module sigaction, for mingw.
Eric Blake <ebb9@byu.net>
parents:
10228
diff
changeset
|
182 |
10321
a6493a165dd2
c-stack: fix regression on Irix 5.3 from 2008-06-21
Eric Blake <ebb9@byu.net>
parents:
10243
diff
changeset
|
183 #elif !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ |
a6493a165dd2
c-stack: fix regression on Irix 5.3 from 2008-06-21
Eric Blake <ebb9@byu.net>
parents:
10243
diff
changeset
|
184 |
a6493a165dd2
c-stack: fix regression on Irix 5.3 from 2008-06-21
Eric Blake <ebb9@byu.net>
parents:
10243
diff
changeset
|
185 # define sa_sigaction sa_handler |
a6493a165dd2
c-stack: fix regression on Irix 5.3 from 2008-06-21
Eric Blake <ebb9@byu.net>
parents:
10243
diff
changeset
|
186 |
a6493a165dd2
c-stack: fix regression on Irix 5.3 from 2008-06-21
Eric Blake <ebb9@byu.net>
parents:
10243
diff
changeset
|
187 #endif /* !@HAVE_SIGACTION@, !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ */ |
9259
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
188 |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
189 |
10706
5a35e8f56744
Define a dummy SA_NODEFER macro on Interix.
Bruno Haible <bruno@clisp.org>
parents:
10655
diff
changeset
|
190 /* Some systems don't have SA_NODEFER. */ |
5a35e8f56744
Define a dummy SA_NODEFER macro on Interix.
Bruno Haible <bruno@clisp.org>
parents:
10655
diff
changeset
|
191 #ifndef SA_NODEFER |
5a35e8f56744
Define a dummy SA_NODEFER macro on Interix.
Bruno Haible <bruno@clisp.org>
parents:
10655
diff
changeset
|
192 # define SA_NODEFER 0 |
5a35e8f56744
Define a dummy SA_NODEFER macro on Interix.
Bruno Haible <bruno@clisp.org>
parents:
10655
diff
changeset
|
193 #endif |
5a35e8f56744
Define a dummy SA_NODEFER macro on Interix.
Bruno Haible <bruno@clisp.org>
parents:
10655
diff
changeset
|
194 |
5a35e8f56744
Define a dummy SA_NODEFER macro on Interix.
Bruno Haible <bruno@clisp.org>
parents:
10655
diff
changeset
|
195 |
9259
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
196 #ifdef __cplusplus |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
197 } |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
198 #endif |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
199 |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
200 #endif /* _GL_SIGNAL_H */ |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
201 #endif /* _GL_SIGNAL_H */ |
cda94d6d670f
Rename signal_.h to signal.in.h.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
202 #endif |