xref: /original-bsd/lib/libc/compat-43/sigcompat.c (revision 7717c4d4)
1 /*
2  * Copyright (c) 1989 The Regents of the University of California.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms are permitted
6  * provided that the above copyright notice and this paragraph are
7  * duplicated in all such forms and that any documentation,
8  * advertising materials, and other materials related to such
9  * distribution and use acknowledge that the software was developed
10  * by the University of California, Berkeley.  The name of the
11  * University may not be used to endorse or promote products derived
12  * from this software without specific prior written permission.
13  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16  */
17 
18 #if defined(LIBC_SCCS) && !defined(lint)
19 static char sccsid[] = "@(#)sigcompat.c	5.1 (Berkeley) 08/26/89";
20 #endif /* LIBC_SCCS and not lint */
21 
22 #include <sys/param.h>
23 #include <sys/signal.h>
24 
25 sigvec(signo, sv, osv)
26 	int signo;
27 	struct sigvec *sv, *osv;
28 {
29 	int ret;
30 
31 	if (sv)
32 		sv->sv_flags ^= SV_INTERRUPT;	/* !SA_INTERRUPT */
33 	ret = sigaction(signo, (struct sigaction *)sv, (struct sigaction *)osv);
34 	if (ret == 0 && osv)
35 		osv->sv_flags ^= SV_INTERRUPT;	/* !SA_INTERRUPT */
36 	return (ret);
37 }
38 
39 sigsetmask(mask)
40 	int mask;
41 {
42 	int omask, n;
43 
44 	n = sigprocmask(SIG_SETMASK, (sigset_t *) &mask, (sigset_t *) &omask);
45 	if (n)
46 		return (n);
47 	return (omask);
48 }
49 
50 sigblock(mask)
51 	int mask;
52 {
53 	int omask, n;
54 
55 	n = sigprocmask(SIG_BLOCK, (sigset_t *) &mask, (sigset_t *) &omask);
56 	if (n)
57 		return (n);
58 	return (omask);
59 }
60 
61 sigpause(mask)
62 	int mask;
63 {
64 
65 	return (sigsuspend((sigset_t *)&mask));
66 }
67