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