heirloom-ed

view sigset.c @ 4:4165f1b57d18

Become SUSv3 compatible and thus remove own regexp code The Heirloom tools can be compiled to comply to several standards. This version does not need this flexibility. We can omit the regexp code and use the system's, by using the SU3 variant of ed. This is the latest of the supported standards.
author markus schnalke <meillo@marmaro.de>
date Mon, 13 Apr 2015 17:26:51 +0200
parents
children
line source
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 */
24 #if defined (__FreeBSD__) || defined (__dietlibc__) || defined (__NetBSD__) || \
25 defined (__OpenBSD__) || defined (__DragonFly__) || defined (__APPLE__)
26 #include <signal.h>
27 #include "sigset.h"
29 void (*sigset(int sig, void (*func)(int)))(int)
30 {
31 struct sigaction nact, oact;
32 sigset_t nset, oset;
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__ */