Mercurial > heirloom-ed
comparison sigset.c @ 0:1493bea5ac22 0.1
Initial version of the standalone heirloom-ed
author | markus schnalke <meillo@marmaro.de> |
---|---|
date | Mon, 05 Sep 2011 16:31:35 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:1493bea5ac22 |
---|---|
1 /* | |
2 * Copyright (c) 2004 Gunnar Ritter | |
3 * | |
4 * This software is provided 'as-is', without any express or implied | |
5 * warranty. In no event will the authors be held liable for any damages | |
6 * arising from the use of this software. | |
7 * | |
8 * Permission is granted to anyone to use this software for any purpose, | |
9 * including commercial applications, and to alter it and redistribute | |
10 * it freely, subject to the following restrictions: | |
11 * | |
12 * 1. The origin of this software must not be misrepresented; you must not | |
13 * claim that you wrote the original software. If you use this software | |
14 * in a product, an acknowledgment in the product documentation would be | |
15 * appreciated but is not required. | |
16 * | |
17 * 2. Altered source versions must be plainly marked as such, and must not be | |
18 * misrepresented as being the original software. | |
19 * | |
20 * 3. This notice may not be removed or altered from any source distribution. | |
21 */ | |
22 /* Sccsid @(#)sigset.c 1.7 (gritter) 1/22/06 */ | |
23 | |
24 #if defined (__FreeBSD__) || defined (__dietlibc__) || defined (__NetBSD__) || \ | |
25 defined (__OpenBSD__) || defined (__DragonFly__) || defined (__APPLE__) | |
26 #include <signal.h> | |
27 #include "sigset.h" | |
28 | |
29 void (*sigset(int sig, void (*func)(int)))(int) | |
30 { | |
31 struct sigaction nact, oact; | |
32 sigset_t nset, oset; | |
33 | |
34 if (sig <= 0) | |
35 return SIG_ERR; | |
36 sigemptyset(&nset); | |
37 sigaddset(&nset, sig); | |
38 if (sigprocmask(func==SIG_HOLD?SIG_BLOCK:SIG_UNBLOCK, &nset, &oset) < 0) | |
39 return SIG_ERR; | |
40 nact.sa_handler = func; | |
41 nact.sa_flags = 0; | |
42 if (sig == SIGCHLD && func == SIG_IGN) | |
43 nact.sa_flags |= SA_NOCLDSTOP|SA_NOCLDWAIT; | |
44 sigemptyset(&nact.sa_mask); | |
45 sigaddset(&nact.sa_mask, sig); | |
46 if (sigaction(sig, func==SIG_HOLD?(struct sigaction *)0:&nact, &oact) | |
47 == -1) | |
48 return SIG_ERR; | |
49 if (sigismember(&oset, sig)) | |
50 return SIG_HOLD; | |
51 else | |
52 return (oact.sa_handler); | |
53 } | |
54 #endif /* __FreeBSD__ || __dietlibc__ || __NetBSD__ || __OpenBSD__ || | |
55 __DragonFly__ || __APPLE__ */ |