Misc changes made in Gnus master
[bpt/emacs.git] / src / syssignal.h
CommitLineData
9ab9afa9 1/* syssignal.h - System-dependent definitions for signals.
99cf43f9
GM
2
3Copyright (C) 1993, 1999, 2001-2012 Free Software Foundation, Inc.
9ab9afa9
JB
4
5This file is part of GNU Emacs.
6
b9b1cc14 7GNU Emacs is free software: you can redistribute it and/or modify
9ab9afa9 8it under the terms of the GNU General Public License as published by
b9b1cc14
GM
9the Free Software Foundation, either version 3 of the License, or
10(at your option) any later version.
9ab9afa9
JB
11
12GNU Emacs is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
b9b1cc14 18along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
9ab9afa9 19
383e0970 20extern void init_signals (void);
2b98b088 21
ae9e757a 22#ifdef HAVE_PTHREAD
333f1b6f 23#include <pthread.h>
f8240abd
YM
24/* If defined, asynchronous signals delivered to a non-main thread are
25 forwarded to the main thread. */
26#define FORWARD_SIGNAL_TO_MAIN_THREAD
27#endif
28
c3aa5fec 29/* Don't #include <signal.h>. That header should always be #included
cf026b25
JB
30 before "config.h", because some configuration files (like s/hpux.h)
31 indicate that SIGIO doesn't work by #undef-ing SIGIO. If this file
32 #includes <signal.h>, then that will re-#define SIGIO and confuse
33 things. */
4d553a13 34/* XXX This is not correct anymore, there is a BROKEN_SIGIO macro. */
00eaaa32 35
9ab9afa9
JB
36#define SIGMASKTYPE sigset_t
37
38#define SIGEMPTYMASK (empty_mask)
1fa53021 39extern sigset_t empty_mask;
9ab9afa9 40
1b1f8f85 41/* POSIX pretty much destroys any possibility of writing sigmask as a
47b682b7 42 macro in standard C. We always define our own version because the
da6062e6 43 predefined macro in Glibc 2.1 is only provided for compatibility for old
47b682b7
AS
44 programs that use int as signal mask type. */
45#undef sigmask
1b1f8f85
JB
46#ifdef __GNUC__
47#define sigmask(SIG) \
48 ({ \
49 sigset_t _mask; \
50 sigemptyset (&_mask); \
51 sigaddset (&_mask, SIG); \
52 _mask; \
53 })
985a35a3 54#else /* ! defined (__GNUC__) */
9bd67a37 55extern sigset_t sys_sigmask ();
1b1f8f85 56#define sigmask(SIG) (sys_sigmask (SIG))
985a35a3 57#endif /* ! defined (__GNUC__) */
1b1f8f85 58
47b682b7
AS
59#undef sigpause
60#define sigpause(MASK) sigsuspend (&(MASK))
9f910b50 61
69037d5a
RS
62#define sigblock(SIG) sys_sigblock (SIG)
63#define sigunblock(SIG) sys_sigunblock (SIG)
cc210d67 64#ifndef sigsetmask
69037d5a 65#define sigsetmask(SIG) sys_sigsetmask (SIG)
cc210d67 66#endif
6c8a1e24 67#undef signal
9c063f29 68#define signal(SIG,ACT) sys_signal(SIG,ACT)
9ab9afa9 69
ae877222
DN
70/* Whether this is what all systems want or not, this is what
71 appears to be assumed in the source, for example data.c:arith_error. */
9af30bdf 72typedef void (*signal_handler_t) (int);
ae877222 73
383e0970
J
74signal_handler_t sys_signal (int signal_number, signal_handler_t action);
75sigset_t sys_sigblock (sigset_t new_mask);
76sigset_t sys_sigunblock (sigset_t new_mask);
77sigset_t sys_sigsetmask (sigset_t new_mask);
5d4cb038 78#if ! (defined TIOCNOTTY || defined USG5 || defined CYGWIN)
845ca893 79_Noreturn void croak (char *);
5d4cb038 80#endif
9ab9afa9 81
69037d5a 82#define sys_sigdel(MASK,SIG) sigdelset (&MASK,SIG)
9ab9afa9 83
1b1f8f85 84#define sigfree() sigsetmask (SIGEMPTYMASK)
1b1f8f85 85
68c45bf0 86#if defined (SIGIO) && defined (BROKEN_SIGIO)
098767d9 87# undef SIGIO
68c45bf0 88#endif
ea0bbd17 89/* These are only used by AIX */
68c45bf0
PE
90#if defined (SIGPOLL) && defined (BROKEN_SIGPOLL)
91#undef SIGPOLL
92#endif
4e677396
KH
93#if defined (SIGAIO) && defined (BROKEN_SIGAIO)
94#undef SIGAIO
95#endif
96#if defined (SIGPTY) && defined (BROKEN_SIGPTY)
97#undef SIGPTY
98#endif
99
68c45bf0 100
739ae010 101/* FIXME? Emacs only defines NSIG_MINIMUM on some platforms? */
68c45bf0
PE
102#if NSIG < NSIG_MINIMUM
103# ifdef NSIG
104# undef NSIG
105# endif
106# define NSIG NSIG_MINIMUM
107#endif
108
9ab9afa9
JB
109/* On bsd, [man says] kill does not accept a negative number to kill a pgrp.
110 Must do that using the killpg call. */
6df54671 111#ifdef BSD_SYSTEM
9ab9afa9
JB
112#define EMACS_KILLPG(gid, signo) (killpg ( (gid), (signo)))
113#else
57d65592 114#ifdef WINDOWSNT
f405affb 115#define EMACS_KILLPG(gid, signo) (kill (gid, signo))
57d65592 116#else
9ab9afa9
JB
117#define EMACS_KILLPG(gid, signo) (kill (-(gid), (signo)))
118#endif
57d65592 119#endif
9ab9afa9
JB
120
121/* Define SIGCHLD as an alias for SIGCLD. There are many conditionals
122 testing SIGCHLD. */
9ab9afa9
JB
123#ifdef SIGCLD
124#ifndef SIGCHLD
125#define SIGCHLD SIGCLD
985a35a3
JB
126#endif /* SIGCHLD */
127#endif /* ! defined (SIGCLD) */
68c45bf0
PE
128
129#ifndef HAVE_STRSIGNAL
130/* strsignal is in sysdep.c */
361358ea 131char *strsignal (int);
68c45bf0 132#endif
ab5796a9 133
f8240abd 134#ifdef FORWARD_SIGNAL_TO_MAIN_THREAD
dff94ed5 135extern pthread_t main_thread;
20ef56db
PE
136void handle_on_main_thread (int, signal_handler_t);
137#endif