annotate src/syssignal.h @ 502:7039e6323819

[xemacs-hg @ 2001-05-04 22:41:46 by ben] ----------------------- byte-comp warning fixes ----------------- New functions for cleanly eliminating byte-compiler warnings. Their definitions require no changes at all in bytecomp.el, meaning that any package that wants to use them and be compatible with older versions of XEmacs need only copy the code and rename the functions (i.e. prefix them with the package name). Eliminate byte-compiler warnings using the new functions in bytecomp-runtime.el. Move coding-system-put,get,category, since they're not Mule-specific and are used in prefer-coding-system. font.el was incredibly ugly. Clean it up. Avoid using defsubst for any exported functions, to avoid possible compatibility problems if we later change the internal interface. (It happened before, with face accessors, between 19.8 and 19.9). Fix tons of warnings. Clean up (new function gpm-is-supported-p eliminates duplicate code in gpm-create/delete-device-hook) and eliminate warnings. ---------- make byte-recompile-directory work in the --------- core `lisp' dir, even in the absence of a Mule XEmacs (i.e. make it skip the Mule files rather than trying to compile them). now you should be able to do `touch *.el' in the `lisp' dir, then M-x byte-recompile-directory, and get no warnings. Avoid trying to compile Mule files in byte-recompile-directory when we're not in a Mule XEmacs, since we're highly likely to get syntax errors. Add a coding-system cookie to all Mule files so that byte-recompile-directory ignores them. Magic cookie function moved to files.el from code-files.el (for use by bytecomp even in a non-coding-system XEmacs), and changed names and semantics for use by bytecomp. NOTE: IMO this is an internal function that we can change as we like (and there is absolutely no code anywhere else using the function). ---------------- GUI improvements: menus, help ------------------- Rearrange order of keymap declarations to be alphabetical. Improve help on help to include all bindings, and group by category. Add bindings for new Info commands. Remove warnings. Use command-hyper-apropos in place of command-apropos. Add a function to do the equivalent of command-apropos. Evals its help-text argument so you can put expressions there. Used now by help-for-help. Add binding to continue text searches. Expand index searches to work over multiple info documents. Add commands to search text/index in User and Lispref. Add new entry, "Uncomment Region" (parallels "Comment Out Region"). Redo Help menu; add bindings for new Info commands to search the index or text of the User and Lispref manuals. Add command for mark-paragraph, activate-region. Make Edit->R accelerator be rectangle, not register (more commonly used), and put rectangle first. Fix the Edit Init File entry to never load the .elc file. Simplify the default-popup-menu. Add Cmds->Tabs menu. Use kp-left not kp_left, etc. ---------------- Miscellaneous bug fixes/cleanup ------------------- byte-compiler-options: Correct doc string. easy-menu-do-define: fix extra quote. fill-paragraph-or-region:Rewrite to be more correct -- use call-interactively so that we always get exactly the same behavior as if the functions were called directly. No need to fiddle with zmacs-region-stays, now that bogus clearing of it (2001-04-28 src/ChangeLog) is removed. Put dialog titles back in -- this time correctly. Fix various other problems with leaks and such. key-sequence-list-description: Clean up fun to always correctly canonicalize. Clean up Kinsoku comments, synch comment-region with FSF 20.7. * simple.el (region-exists-p): * simple.el (region-active-p): Add comment about which one is correct to use in menu specs. * sound.el (load-sound-file): Minor code clean up. * startup.el: * startup.el (command-line-early): * startup.el (initial-scratch-message): Comment changes. Add info about sample.init.el to splash screen. Improve initial-scratch-message and clarify purpose of Scratch buffer. Fix byte-compile warning. ------------------------ Added features ------------------------- Add new variable to control whether etags checks all parent directories for tag files. (On by default.) * hash-table.el: New file, useful utility functions. * dumped-lisp.el (preloaded-file-list): Dump hash-table.el. ------------ notable bug fix: Windows event code -------------- Get critical quit working. ------------ notable bug fix and new feature: regex code -------------- Shy groups were implemented in a horrible, half-assed way that would cause them to screw up regex searching in most cases. Fixed to work correctly. Also extended back-reference syntax past 9. Only is recognized as such if there are at least that many non-shy groups; and optionally will warn about such uses, to catch old code that might be using them differently. (Added variable to control this in search.c -- `warn-about-possibly-incompatible-back- references', on by default for the moment. Declared in lisp.h. ---------------- process/SIGIO improvements ------------------- define USE_GETADDRINFO to replace more complex conditional, and use it. the code conditionalized on this in unix_open_network_stream had *serious* problems handling errors. it's now fixed, and major amounts of duplicate code between the two versions were combined. don't disable SIGIO and other interrupts unless CONNECT_NEEDS_SLOWED_INTERRUPTS is defined -- don't penalize OS's without bugs. similarly for a freebsd bug that was affecting all OS's. * s\ultrix.h: define CONNECT_NEEDS_SLOWED_INTERRUPTS, since that's the OS mentioned as having a kernel bug. * sysdep.c (request_sigio_on_device): * sysdep.c (unrequest_sigio_on_device): fix SIGIO problems on Linux. add check for O_ASYNC in case it's defined and FASYNC isn't. add comment about other ways to do SIGIO on Linux. * callproc.c (Fold_call_process_internal): * process.c (Fstart_process_internal): Deal with the possibility that `default-directory' doesn't have terminating slash. Correct comments about vfork. ---------------- Miscellaneous bug fixes/cleanup ------------------- * callint.c (Finteractive): Add lots of documentation -- exactly what the Lisp equivalents of all the interactive specs are. * console.h (struct console): change type of quit_char to Emchar. * event-msw.c (lstream_type_create_mswindows_selectable): spacing change. Eliminate events-mod.h and combine into events.h. * emacs.c: * emacs.c (make_arg_list_1): * emacs.c (main_1): A couple of char->Extbyte changes, add a comment. * glyphs-msw.c: Correct indentation of function defns to not exceed 80 cols. Try (sort of) to fix some code that sets the colors of the progress gauge. (Commented out) * keymap.c (syms_of_keymap): use DEFSYMBOL. * process.c (read_process_output): No need to fiddle with zmacs_region_stays, now that bogus clearing of it (see below) is removed. * search.c (Freplace_match): warning fix.
author ben
date Fri, 04 May 2001 22:42:35 +0000
parents abe6d1db359e
children 023b83f4e54b
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.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 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
8 Free Software Foundation; either version 2, or (at your option) any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 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
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 along with XEmacs; see the file COPYING. If not, write to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 Boston, MA 02111-1307, USA. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 /* Synched up with: FSF 19.30. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
23 #ifndef INCLUDED_syssignal_h_
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
24 #define INCLUDED_syssignal_h_
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 /* 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
27 was that that header should always be #included before <config.h>, because
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 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
29 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
30 re-#define SIGIO and confuse things.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 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
33 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
34 <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
35 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
36
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 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
38 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
39 at the end, after including signal.h. Therefore, it's important that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 <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
41 nothing should be directly including <signal.h> these days.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 -- jwz, 29-nov-93
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 */
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 #include <signal.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 #include <errno.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 /* SIGPOLL is the SVR4 signal. Those systems generally define
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 SIGIO as an alias for SIGPOLL, but just in case ... */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 #if defined (BROKEN_SIGIO)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 # if defined (SIGIO) && defined (SIGPOLL)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 # if SIGIO == SIGPOLL
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 # undef SIGIO
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 # undef SIGPOLL
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 # else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 # undef SIGIO
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 # endif
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 #else /* Not BROKEN_SIGIO */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 # if !defined (SIGIO) && defined (SIGPOLL)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 # define SIGIO SIGPOLL
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 # endif
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 /* Define SIGCHLD as an alias for SIGCLD. There are many conditionals
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 testing SIGCHLD. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 #if defined (SIGCLD) && !defined (SIGCHLD)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 # define SIGCHLD SIGCLD
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 #endif /* SIGCHLD */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 #ifdef BROKEN_SIGCHLD
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 #undef SIGCHLD
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 #ifdef SIGCHLD
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 #define EMACS_BLOCK_SIGCHLD EMACS_BLOCK_SIGNAL (SIGCHLD)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 #define EMACS_UNBLOCK_SIGCHLD EMACS_UNBLOCK_SIGNAL (SIGCHLD)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 #define EMACS_BLOCK_SIGCHLD
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 #define EMACS_UNBLOCK_SIGCHLD
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 /* According to W.R. Stevens __Advanced Programming in the Unix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 Environment__, there are four different paradigms for handling
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 signals. We use autoconf to tell us which one applies.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 Note that on some systems, more than one paradigm is implemented
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 (typically, the POSIX sigaction/sigprocmask and either the older
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 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
91
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 NOTE: We use EMACS_* macros for most signal operations, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 just signal() for the standard signal-setting operation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 Perhaps we should change this to EMACS_SIGNAL(), but that runs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 the risk of someone forgetting this convention and calling
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 signal() directly. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 #ifndef NeXT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 typedef SIGTYPE (*signal_handler_t) (int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 #if defined (HAVE_SIGPROCMASK)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 /* The POSIX way (sigaction, sigprocmask, sigpending, sigsuspend) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 signal_handler_t sys_do_signal (int signal_number, signal_handler_t action);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 /* Provide our own version of signal(), that calls sigaction(). The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 name is not sys_signal() because a function of that name exists in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 libenergize.a */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 #undef signal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 #define signal sys_do_signal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 #define EMACS_BLOCK_SIGNAL(sig) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 sigset_t ES_mask; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 sigemptyset (&ES_mask); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 sigaddset (&ES_mask, sig); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 sigprocmask (SIG_BLOCK, &ES_mask, NULL); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 #define EMACS_UNBLOCK_SIGNAL(sig) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 sigset_t ES_mask; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 sigemptyset (&ES_mask); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 sigaddset (&ES_mask, sig); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 sigprocmask (SIG_UNBLOCK, &ES_mask, NULL); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 #define EMACS_UNBLOCK_ALL_SIGNALS() do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 sigset_t ES_mask; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 sigemptyset (&ES_mask); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 sigprocmask (SIG_SETMASK, &ES_mask, NULL); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 #define EMACS_WAIT_FOR_SIGNAL(sig) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 sigset_t ES_mask; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 sigprocmask (0, NULL, &ES_mask); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 sigdelset (&ES_mask, sig); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 sigsuspend (&ES_mask); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 #define EMACS_REESTABLISH_SIGNAL(sig, handler)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 #elif defined (HAVE_SIGBLOCK)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 /* The older BSD way (signal/sigvec, sigblock, sigsetmask, sigpause) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 /* It's OK to use signal() here directly. No unreliable signal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 problems. However, we use sigvec() because it allows us to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 request interruptible I/O. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 #define signal sys_do_signal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 /* Is it necessary to define sigmask like this? */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 #ifndef sigmask
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 # define sigmask(no) (1L << ((no) - 1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 #define EMACS_BLOCK_SIGNAL(sig) sigblock (sigmask (sig))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 #define EMACS_UNBLOCK_SIGNAL(sig) sigsetmask (sigblock (0) & ~sigmask (sig))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 #define EMACS_UNBLOCK_ALL_SIGNALS() sigsetmask (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 #define EMACS_WAIT_FOR_SIGNAL(sig) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 int ES_mask = sigblock (0); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 sigpause (ES_mask & ~sigmask (sig)); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 #define EMACS_REESTABLISH_SIGNAL(sig, handler)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 #elif defined (HAVE_SIGHOLD)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 /* The older SYSV way (signal/sigset, sighold, sigrelse, sigignore,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 sigpause) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 #define signal sigset
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 #define EMACS_BLOCK_SIGNAL(sig) sighold (sig)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 #define EMACS_UNBLOCK_SIGNAL(sig) sigrelse (sig)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 /* #### There's not really any simple way to implement this.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 Since EMACS_UNBLOCK_ALL_SIGNALS() is only called once (at startup),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 it's probably OK to just ignore it. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 #define EMACS_UNBLOCK_ALL_SIGNALS() 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 #define EMACS_WAIT_FOR_SIGNAL(sig) sigpause (sig)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 #define EMACS_REESTABLISH_SIGNAL(sig, handler)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 /* The oldest SYSV way (signal only; unreliable signals) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 /* Old USG systems don't really have signal blocking.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 We indicate this by not defining EMACS_BLOCK_SIGNAL or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 EMACS_WAIT_FOR_SIGNAL. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 #define EMACS_UNBLOCK_SIGNAL(sig) 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 #define EMACS_UNBLOCK_ALL_SIGNALS() 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 #define EMACS_REESTABLISH_SIGNAL(sig, handler) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 int old_errno = errno; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 signal (sig, handler); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 errno = old_errno; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 /* Under SYSV, setting a signal handler for SIGCLD causes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 SIGCLD to immediately be sent if there any unwaited processes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 out there. This means that the SIGCLD handler *must* call
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 wait() to reap the status of all processes -- it cannot
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 simply set a flag and then reestablish the handler, because
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 it will get called again, infinitely. We only need to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 worry about this on systems where signals need to be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 reestablished (SYSV Release 2 and earlier). */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 #define OBNOXIOUS_SYSV_SIGCLD_BEHAVIOR
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 /* 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
211 Must do that using the killpg call. */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
212 #ifdef HAVE_KILLPG
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
213 #define EMACS_KILLPG(pid, signo) killpg (pid, signo)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 #else
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
215 #ifdef WIN32_NATIVE
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
216 #define EMACS_KILLPG(pid, signo) kill (pid, signo)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 #else
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
218 #define EMACS_KILLPG(pid, signo) kill (-(pid), signo)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 #ifndef NSIG
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 # define NSIG (SIGUSR2+1) /* guess how many elements are in sys_siglist... */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 /* SYS_SIGLIST_DECLARED is determined by configure. On Linux, it seems,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 configure incorrectly fails to find it, so s/linux.h defines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 HAVE_SYS_SIGLIST. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 #if !defined (SYS_SIGLIST_DECLARED) && !defined (HAVE_SYS_SIGLIST)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
230 extern const char *sys_siglist[];
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 #ifdef SIGDANGER
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 SIGTYPE memory_warning_signal (int sig);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
237 #ifdef WIN32_NATIVE
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 /* Prototypes for signal functions, see nt.c */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
239 typedef void (__cdecl *mswindows_sighandler) (int);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
240 mswindows_sighandler mswindows_sigset (int sig, mswindows_sighandler handler);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
241 int mswindows_sighold (int nsig);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
242 int mswindows_sigrelse (int nsig);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
243 int mswindows_sigpause (int nsig);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
244 int mswindows_raise (int nsig);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
245 #endif /* WIN32_NATIVE */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
247 #endif /* INCLUDED_syssignal_h_ */