annotate src/syssignal.h @ 4901:7504864a986c

Don't use Boyer-Moore if repeated octets & case-insensitive search. 2010-01-30 Aidan Kehoe <kehoea@parhasard.net> * search.c (search_buffer): Don't use Boyer-Moore for case-insensitive search if the search pattern contains repeated Ibytes and the corresponding character has case information (or, equivalently, if one of its case equivalents would contain repeated Ibytes).
author Aidan Kehoe <kehoea@parhasard.net>
date Sat, 30 Jan 2010 22:25:39 +0000
parents aa5ed11f473b
children 308d34e9f07d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 /* syssignal.h - System-dependent definitions for signals.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 Copyright (C) 1992, 1993 Free Software Foundation, Inc.
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 771
diff changeset
3 Copyright (C) 1996 Ben Wing.
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 771
diff changeset
4
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 XEmacs is distributed in the hope that it will be useful, but WITHOUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 along with XEmacs; see the file COPYING. If not, write to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 Boston, MA 02111-1307, USA. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 /* Synched up with: FSF 19.30. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
24 #ifndef INCLUDED_syssignal_h_
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
25 #define INCLUDED_syssignal_h_
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 /* In the old world, one could not #include <signal.h> here. The party line
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 was that that header should always be #included before <config.h>, because
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 some configuration files (like s/hpux.h) indicate that SIGIO doesn't work
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 by #undef-ing SIGIO, and if this file #includes <signal.h>, then that will
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 re-#define SIGIO and confuse things.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 This was, however, a completely fucked up state of affairs, because on some
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 systems it's necessary for the s/m files to #define things in order to get
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 <signal.h> to provide the right typedefs, etc. And it's generally a broken
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 concept for <config.h> to not be the very very first file included.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 So instead of #undef'ing SIGIO in the various s/m files, I've changed them
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 to define BROKEN_SIGIO instead, then we (syssignal.h) do an #undef SIGIO
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 at the end, after including signal.h. Therefore, it's important that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 <signal.h> not be included after "syssignal.h", but that's the normal state:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 nothing should be directly including <signal.h> these days.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 -- jwz, 29-nov-93
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 #include <signal.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 #include <errno.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 /* SIGPOLL is the SVR4 signal. Those systems generally define
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 SIGIO as an alias for SIGPOLL, but just in case ... */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 #if defined (BROKEN_SIGIO)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 # if defined (SIGIO) && defined (SIGPOLL)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 # if SIGIO == SIGPOLL
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 # undef SIGIO
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 # undef SIGPOLL
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 # else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 # undef SIGIO
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 # endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 # endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 #else /* Not BROKEN_SIGIO */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 # if !defined (SIGIO) && defined (SIGPOLL)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 # define SIGIO SIGPOLL
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 # endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 /* Define SIGCHLD as an alias for SIGCLD. There are many conditionals
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 testing SIGCHLD. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 #if defined (SIGCLD) && !defined (SIGCHLD)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 # define SIGCHLD SIGCLD
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 #endif /* SIGCHLD */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 #ifdef BROKEN_SIGCHLD
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 #undef SIGCHLD
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 #ifdef SIGCHLD
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 #define EMACS_BLOCK_SIGCHLD EMACS_BLOCK_SIGNAL (SIGCHLD)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 #define EMACS_UNBLOCK_SIGCHLD EMACS_UNBLOCK_SIGNAL (SIGCHLD)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 #define EMACS_BLOCK_SIGCHLD
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 #define EMACS_UNBLOCK_SIGCHLD
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 /* According to W.R. Stevens __Advanced Programming in the Unix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 Environment__, there are four different paradigms for handling
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 signals. We use autoconf to tell us which one applies.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 Note that on some systems, more than one paradigm is implemented
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 (typically, the POSIX sigaction/sigprocmask and either the older
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 SYSV or BSD way). In such a case, we prefer the POSIX way.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92
613
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
93 We used to say this:
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
94
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
95 [[ NOTE: We use EMACS_* macros for most signal operations, but
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 just signal() for the standard signal-setting operation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 Perhaps we should change this to EMACS_SIGNAL(), but that runs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 the risk of someone forgetting this convention and calling
613
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
99 signal() directly. ]]
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
100
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
101 But current policy is to avoid playing with macros as much as
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
102 possible, since in the long run it really just ends up creating
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
103 unmaintainable code -- someone newly reading the code is never
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
104 going to realize exactly which calls are redirected, and on
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
105 which systems, and where the redirection occurs.
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
106
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
107 Possibly we should use the new "qxe" convention.
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
108 */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 814
diff changeset
110 typedef RETSIGTYPE (XCDECL * signal_handler_t) (int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 #if defined (HAVE_SIGPROCMASK)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 /* The POSIX way (sigaction, sigprocmask, sigpending, sigsuspend) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115
613
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
116 signal_handler_t qxe_reliable_signal (int signal_number,
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
117 signal_handler_t action);
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
118
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
119 #define EMACS_SIGNAL qxe_reliable_signal
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 #define EMACS_BLOCK_SIGNAL(sig) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 sigset_t ES_mask; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 sigemptyset (&ES_mask); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 sigaddset (&ES_mask, sig); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 sigprocmask (SIG_BLOCK, &ES_mask, NULL); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 #define EMACS_UNBLOCK_SIGNAL(sig) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 sigset_t ES_mask; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 sigemptyset (&ES_mask); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 sigaddset (&ES_mask, sig); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 sigprocmask (SIG_UNBLOCK, &ES_mask, NULL); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 #define EMACS_UNBLOCK_ALL_SIGNALS() do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 sigset_t ES_mask; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 sigemptyset (&ES_mask); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 sigprocmask (SIG_SETMASK, &ES_mask, NULL); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 #define EMACS_WAIT_FOR_SIGNAL(sig) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 sigset_t ES_mask; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 sigprocmask (0, NULL, &ES_mask); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 sigdelset (&ES_mask, sig); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 sigsuspend (&ES_mask); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 #define EMACS_REESTABLISH_SIGNAL(sig, handler)
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 978
diff changeset
149 #define SIG_ARG_MAYBE_UNUSED(decl) UNUSED (decl)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 #elif defined (HAVE_SIGBLOCK)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 /* The older BSD way (signal/sigvec, sigblock, sigsetmask, sigpause) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 /* It's OK to use signal() here directly. No unreliable signal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 problems. However, we use sigvec() because it allows us to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 request interruptible I/O. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158
613
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
159 #define EMACS_SIGNAL qxe_reliable_signal
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 /* Is it necessary to define sigmask like this? */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 #ifndef sigmask
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 # define sigmask(no) (1L << ((no) - 1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 #define EMACS_BLOCK_SIGNAL(sig) sigblock (sigmask (sig))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 #define EMACS_UNBLOCK_SIGNAL(sig) sigsetmask (sigblock (0) & ~sigmask (sig))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 #define EMACS_UNBLOCK_ALL_SIGNALS() sigsetmask (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 #define EMACS_WAIT_FOR_SIGNAL(sig) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 int ES_mask = sigblock (0); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 sigpause (ES_mask & ~sigmask (sig)); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 #define EMACS_REESTABLISH_SIGNAL(sig, handler)
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 978
diff changeset
175 #define SIG_ARG_MAYBE_UNUSED(decl) UNUSED (decl)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 #elif defined (HAVE_SIGHOLD)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 /* The older SYSV way (signal/sigset, sighold, sigrelse, sigignore,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 sigpause) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181
613
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
182 #define EMACS_SIGNAL sigset
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 #define EMACS_BLOCK_SIGNAL(sig) sighold (sig)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 #define EMACS_UNBLOCK_SIGNAL(sig) sigrelse (sig)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 /* #### There's not really any simple way to implement this.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 Since EMACS_UNBLOCK_ALL_SIGNALS() is only called once (at startup),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 it's probably OK to just ignore it. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 #define EMACS_UNBLOCK_ALL_SIGNALS() 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 #define EMACS_WAIT_FOR_SIGNAL(sig) sigpause (sig)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 #define EMACS_REESTABLISH_SIGNAL(sig, handler)
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 978
diff changeset
191 #define SIG_ARG_MAYBE_UNUSED(decl) UNUSED (decl)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192
613
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
193 #elif defined (WIN32_NATIVE)
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
194
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
195 /* MS Windows signal emulation (in turns emulates the sigset/sighold
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
196 paradigm) */
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
197
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
198 #define EMACS_SIGNAL mswindows_sigset
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
199 #define EMACS_BLOCK_SIGNAL(sig) mswindows_sighold (sig)
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
200 #define EMACS_UNBLOCK_SIGNAL(sig) mswindows_sigrelse (sig)
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
201 /* #### There's not really any simple way to implement this.
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
202 Since EMACS_UNBLOCK_ALL_SIGNALS() is only called once (at startup),
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
203 it's probably OK to just ignore it. */
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
204 #define EMACS_UNBLOCK_ALL_SIGNALS() 0
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
205 #define EMACS_WAIT_FOR_SIGNAL(sig) mswindows_sigpause (sig)
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
206 #define EMACS_REESTABLISH_SIGNAL(sig, handler)
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 978
diff changeset
207 #define SIG_ARG_MAYBE_UNUSED(decl) UNUSED (decl)
613
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
208
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
209 /* Defines that we need that aren't in the standard signal.h */
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
210 #define SIGHUP 1 /* Hang up */
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
211 #define SIGQUIT 3 /* Quit process */
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
212 #define SIGKILL 9 /* Die, die die */
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
213 #define SIGALRM 14 /* Alarm */
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
214 #define SIGPROF 29 /* Profiling timer exp */
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
215
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 /* The oldest SYSV way (signal only; unreliable signals) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 /* Old USG systems don't really have signal blocking.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 We indicate this by not defining EMACS_BLOCK_SIGNAL or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 EMACS_WAIT_FOR_SIGNAL. */
613
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
223 #define EMACS_SIGNAL signal
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 #define EMACS_UNBLOCK_SIGNAL(sig) 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 #define EMACS_UNBLOCK_ALL_SIGNALS() 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 #define EMACS_REESTABLISH_SIGNAL(sig, handler) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 int old_errno = errno; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 signal (sig, handler); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 errno = old_errno; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 } while (0)
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 978
diff changeset
232 #define SIG_ARG_MAYBE_UNUSED(decl) decl
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 /* Under SYSV, setting a signal handler for SIGCLD causes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 SIGCLD to immediately be sent if there any unwaited processes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 out there. This means that the SIGCLD handler *must* call
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 wait() to reap the status of all processes -- it cannot
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 simply set a flag and then reestablish the handler, because
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 it will get called again, infinitely. We only need to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 worry about this on systems where signals need to be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 reestablished (SYSV Release 2 and earlier). */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 #define OBNOXIOUS_SYSV_SIGCLD_BEHAVIOR
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243
613
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
244 #endif /* different signalling methods */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 /* On bsd, [man says] kill does not accept a negative number to kill a pgrp.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 Must do that using the killpg call. */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
248 #ifdef HAVE_KILLPG
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
249 #define EMACS_KILLPG(pid, signo) killpg (pid, signo)
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 771
diff changeset
250 #elif defined (WIN32_NATIVE)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 771
diff changeset
251 #define EMACS_KILLPG(pid, signo) should never be called
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 #else
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
253 #define EMACS_KILLPG(pid, signo) kill (-(pid), signo)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 #ifndef NSIG
978
13e47461d509 [xemacs-hg @ 2002-08-29 19:45:20 by james]
james
parents: 872
diff changeset
257 # ifdef USG5_4
13e47461d509 [xemacs-hg @ 2002-08-29 19:45:20 by james]
james
parents: 872
diff changeset
258 /* Some SVr4s don't define NSIG in sys/signal.h for ANSI environments;
13e47461d509 [xemacs-hg @ 2002-08-29 19:45:20 by james]
james
parents: 872
diff changeset
259 * instead, there's a system variable _sys_nsig. Unfortunately, we need the
13e47461d509 [xemacs-hg @ 2002-08-29 19:45:20 by james]
james
parents: 872
diff changeset
260 * constant to dimension an array. So wire in the appropriate value here.
13e47461d509 [xemacs-hg @ 2002-08-29 19:45:20 by james]
james
parents: 872
diff changeset
261 */
13e47461d509 [xemacs-hg @ 2002-08-29 19:45:20 by james]
james
parents: 872
diff changeset
262 # define NSIG 32
13e47461d509 [xemacs-hg @ 2002-08-29 19:45:20 by james]
james
parents: 872
diff changeset
263 # else
13e47461d509 [xemacs-hg @ 2002-08-29 19:45:20 by james]
james
parents: 872
diff changeset
264 # define NSIG (SIGUSR2+1) /* guess how many elements are in sys_siglist... */
13e47461d509 [xemacs-hg @ 2002-08-29 19:45:20 by james]
james
parents: 872
diff changeset
265 # endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267
2651
3580ae2ce979 [xemacs-hg @ 2005-03-11 11:18:44 by malcolmp]
malcolmp
parents: 2286
diff changeset
268 /* HAVE_DECL_SYS_SIGLIST is determined by configure. On Linux, it seems,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 configure incorrectly fails to find it, so s/linux.h defines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 HAVE_SYS_SIGLIST. */
2655
4769b9c268eb [xemacs-hg @ 2005-03-12 11:00:20 by malcolmp]
malcolmp
parents: 2651
diff changeset
271 #if (!defined(HAVE_DECL_SYS_SIGLIST) || !HAVE_DECL_SYS_SIGLIST ) && !defined (HAVE_SYS_SIGLIST)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
272 extern const char *sys_siglist[];
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 #ifdef SIGDANGER
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 SIGTYPE memory_warning_signal (int sig);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278
613
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
279 #if defined (WIN32_NATIVE) || defined (CYGWIN_BROKEN_SIGNALS)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
280 typedef void (__cdecl *mswindows_sighandler) (int);
613
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
281
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
282 /* Prototypes for signal functions, see win32.c */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
283 int mswindows_sighold (int nsig);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
284 int mswindows_sigrelse (int nsig);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
285 int mswindows_sigpause (int nsig);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
286 int mswindows_raise (int nsig);
613
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
287 mswindows_sighandler mswindows_sigset (int sig, mswindows_sighandler handler);
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
288
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
289 #endif /* defined (WIN32_NATIVE) || defined (CYGWIN_BROKEN_SIGNALS) */
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
290
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
291 signal_handler_t set_timeout_signal (int signal_number,
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
292 signal_handler_t action);
023b83f4e54b [xemacs-hg @ 2001-06-10 10:42:16 by ben]
ben
parents: 442
diff changeset
293
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
295 #endif /* INCLUDED_syssignal_h_ */