1/* $NetBSD$ */ 2 3/* Copyright (C) 1992, 2001, 2003, 2004 Free Software Foundation, Inc. 4 Written by James Clark (jjc@jclark.com) 5 6This file is part of groff. 7 8groff is free software; you can redistribute it and/or modify it under 9the terms of the GNU General Public License as published by the Free 10Software Foundation; either version 2, or (at your option) any later 11version. 12 13groff is distributed in the hope that it will be useful, but WITHOUT ANY 14WARRANTY; without even the implied warranty of MERCHANTABILITY or 15FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 16for more details. 17 18You should have received a copy of the GNU General Public License along 19with groff; see the file COPYING. If not, write to the Free Software 20Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ 21 22/* Unfortunately vendors seem to have problems writing a <signal.h> 23that 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 38extern "C" { 39#endif 40 41extern void cleanup(void); 42 43static 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 56void 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 71void 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