]> git.pond.sub.org Git - empserver/blob - src/lib/gen/signal.c
Indented with src/scripts/indent-emp.
[empserver] / src / lib / gen / signal.c
1 /*
2  *  Empire - A multi-player, client/server Internet based war game.
3  *  Copyright (C) 1986-2000, Dave Pare, Jeff Bailey, Thomas Ruschak,
4  *                           Ken Stevens, Steve McClure
5  *
6  *  This program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program; if not, write to the Free Software
18  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  *  ---
21  *
22  *  See the "LEGAL", "LICENSE", "CREDITS" and "README" files for all the
23  *  related information and legal notices. It is expected that any future
24  *  projects/authors will amend these files as needed.
25  *
26  *  ---
27  *
28  *  sig.c: block and unblock signals for critical sections
29  * 
30  *  Known contributors to this file:
31  *     Doug Hay, 1998
32  *     Steve McClure, 1998
33  */
34
35 #include "misc.h"
36 #include "gen.h"
37 #include <signal.h>
38
39 u_int mask;
40
41 void
42 blocksig(void)
43 {
44 #if !defined(_WIN32)
45     mask = sigsetmask(0xffffffff);
46 #endif
47 }
48
49 void
50 unblocksig(void)
51 {
52 #if !defined(_WIN32)
53     sigsetmask(mask);
54 #endif
55 }
56
57 #ifdef sys5
58 const s_char *sys_siglist[] = {
59     "no signal",
60     "interrupt",
61     "quit",
62     "illegal instruction",
63     "trace trap",
64     "IOT instruction",
65     "system crash imminent",
66     "floating point exception",
67     "kill",
68     "bus error",
69     "segmentation violation",
70     "bad argument to system call",
71     "write on a pipe with no one to read it",
72     "alarm clock",
73     "software termination",
74     "user defined signal 1",
75     "user defined signal 2",
76     "death of a child",
77     "power-fail restart",
78     "asychronous i/o",
79     "PTY read/write",
80     "I/O intervention required",
81     "monitor mode granted",
82     "monitor mode retracted",
83     "sound ack",
84     "data pending",
85 };
86 #else
87 #if (!defined __ppc__) && (!defined linux) && (!defined FBSD) && (!defined __linux__)
88 /* linux and osx declare sys_siglist in signal.h */
89 extern s_char *sys_siglist[];
90 #endif /* linux */
91 #endif /* sys5 */
92
93 const s_char *
94 signame(int sig)
95 {
96 #ifdef POSIX_SIGNALS
97     if (sig <= 0 || sig > _sys_nsig)
98         return "bad signal";
99     return _sys_siglist[sig];
100 #else  /* POSIX_SIGNALS */
101     if (sig <= 0 || sig > NSIG)
102         return "bad signal";
103     return sys_siglist[sig];
104 #endif /* POSIX_SIGNALS */
105 }