1 /* $NetBSD: signal.c,v 1.1.1.1 2016/01/13 18:41:49 christos Exp $ */ 2 3 /* Copyright (C) 1992, 2001, 2003, 2004 Free Software Foundation, Inc. 4 Written by James Clark (jjc@jclark.com) 5 6 This file is part of groff. 7 8 groff is free software; you can redistribute it and/or modify it under 9 the terms of the GNU General Public License as published by the Free 10 Software Foundation; either version 2, or (at your option) any later 11 version. 12 13 groff is distributed in the hope that it will be useful, but WITHOUT ANY 14 WARRANTY; without even the implied warranty of MERCHANTABILITY or 15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 16 for more details. 17 18 You should have received a copy of the GNU General Public License along 19 with groff; see the file COPYING. If not, write to the Free Software 20 Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ 21 22 /* Unfortunately vendors seem to have problems writing a <signal.h> 23 that is correct for C++, so we implement all signal handling in C. */ 24 25 #include <stdlib.h> 26 27 #ifdef HAVE_CONFIG_H 28 #include <config.h> 29 #endif 30 31 #include <sys/types.h> 32 #include <signal.h> 33 #ifdef HAVE_UNISTD_H 34 #include <unistd.h> 35 #endif 36 37 #ifdef __cplusplus 38 extern "C" { 39 #endif 40 41 extern void cleanup(void); 42 43 static RETSIGTYPE handle_fatal_signal(int signum) 44 { 45 signal(signum, SIG_DFL); 46 cleanup(); 47 #ifdef HAVE_KILL 48 kill(getpid(), signum); 49 #else 50 /* MS-DOS and Win32 don't have kill(); the best compromise is 51 probably to use exit() instead. */ 52 exit(signum); 53 #endif 54 } 55 56 void catch_fatal_signals(void) 57 { 58 #ifdef SIGHUP 59 signal(SIGHUP, handle_fatal_signal); 60 #endif 61 signal(SIGINT, handle_fatal_signal); 62 signal(SIGTERM, handle_fatal_signal); 63 } 64 65 #ifdef __cplusplus 66 } 67 #endif 68 69 #ifndef HAVE_RENAME 70 71 void ignore_fatal_signals() 72 { 73 #ifdef SIGHUP 74 signal(SIGHUP, SIG_IGN); 75 #endif 76 signal(SIGINT, SIG_IGN); 77 signal(SIGTERM, SIG_IGN); 78 } 79 80 #endif /* not HAVE_RENAME */ 81