From 00eaaa321cbd33275bd2cece992824999cf7a5cf Mon Sep 17 00:00:00 2001 From: Jim Blandy Date: Wed, 19 May 1993 22:01:35 +0000 Subject: [PATCH] Some changes from Michael K. Johnson for Linux. * sysdep.c (sys_siglist): Don't define this if HAVE_SYS_SIGLIST is #defined. That lets the system provide it, if it has it. * syssignal.h (sigmask): Only define this if hasn't given us a definition already. * syssignal.h (sys_sigpause): Fix argument in prototype. * sysdep.c (init_signals): The masks are called empty_mask and full_mask, not signal_empty_mask and signal_full_mask. (signal_handler_t): Moved .... * syssignal.h: ... to here. * systty.h (EMACS_SET_TTY_PGRP): Call tcsetpgrp with the correct arguments. * emacs.c (main): Don't try to establish signal handlers for SIGBUS and SIGSYS unless they're actually #defined. --- src/emacs.c | 4 ++++ src/sysdep.c | 10 ++++------ src/syssignal.h | 15 ++++++++++++--- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/emacs.c b/src/emacs.c index 68d0ce3169..dac22ca1c2 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -407,9 +407,13 @@ main (argc, argv, envp) signal (SIGEMT, fatal_error_signal); #endif signal (SIGFPE, fatal_error_signal); +#ifdef SIGBUS signal (SIGBUS, fatal_error_signal); +#endif signal (SIGSEGV, fatal_error_signal); +#ifdef SIGSYS signal (SIGSYS, fatal_error_signal); +#endif signal (SIGTERM, fatal_error_signal); #ifdef SIGXCPU signal (SIGXCPU, fatal_error_signal); diff --git a/src/sysdep.c b/src/sysdep.c index a6c1bdfbb3..99df686533 100644 --- a/src/sysdep.c +++ b/src/sysdep.c @@ -2040,14 +2040,10 @@ static struct sigaction new_action, old_action; init_signals () { -#ifdef POSIX_SIGNALS - sigemptyset (&signal_empty_mask); - sigfillset (&signal_full_mask); -#endif + sigemptyset (&empty_mask); + sigfillset (&full_mask); } -int (*signal_handler_t) (); - signal_handler_t sys_signal (int signal_number, signal_handler_t action) { @@ -2417,6 +2413,7 @@ sys_write (fildes, buf, nbyte) * always negligible. Fred Fish, Unisoft Systems Inc. */ +#ifndef HAVE_SYS_SIGLIST char *sys_siglist[NSIG + 1] = { #ifdef AIX @@ -2477,6 +2474,7 @@ char *sys_siglist[NSIG + 1] = #endif /* not AIX */ 0 }; +#endif HAVE_SYS_SIGLIST /* * Warning, this function may not duplicate 4.2 action properly diff --git a/src/syssignal.h b/src/syssignal.h index dddaee8092..ad3958647f 100644 --- a/src/syssignal.h +++ b/src/syssignal.h @@ -18,6 +18,9 @@ along with GNU Emacs; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifdef POSIX_SIGNALS + +#include + #define SIGMASKTYPE sigset_t #define SIGEMPTYMASK (empty_mask) @@ -26,6 +29,7 @@ extern sigset_t empty_mask, full_mask, temp_mask; /* POSIX pretty much destroys any possibility of writing sigmask as a macro in standard C. */ +#ifndef sigmask #ifdef __GNUC__ #define sigmask(SIG) \ ({ \ @@ -37,6 +41,7 @@ extern sigset_t empty_mask, full_mask, temp_mask; #else /* ! defined (__GNUC__) */ #define sigmask(SIG) (sys_sigmask (SIG)) #endif /* ! defined (__GNUC__) */ +#endif #define sigpause(SIG) sys_sigpause(SIG) #define sigblock(SIG) sys_sigblock(SIG) @@ -45,9 +50,13 @@ extern sigset_t empty_mask, full_mask, temp_mask; #define sighold(SIG) ONLY_USED_IN_BSD_4_1 #define sigrelse(SIG) ONLY_USED_IN_BSD_4_1 -int (*sys_signal (int signal_number, int (*action)())) (); -int sys_sigpause (int signal_number); -sigset_t sys_sigblock (sigset_t new_mask); +/* Whether this is what all systems want or not, this is what + appears to be assumed in the source, for example data.c:arith_error() */ +typedef RETSIGTYPE (*signal_handler_t) (int); + +signal_handler_t sys_signal (int signal_number, int (*action)()); +int sys_sigpause (sigset_t new_mask); +sigset_t sys_sigblock (sigset_t new_mask); sigset_t sys_sigunblock (sigset_t new_mask); sigset_t sys_sigsetmask (sigset_t new_mask); -- 2.20.1