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