xref: /openbsd/lib/libc/compat-43/sigcompat.c (revision df930be7)
1*df930be7Sderaadt /*
2*df930be7Sderaadt  * Copyright (c) 1989 The Regents of the University of California.
3*df930be7Sderaadt  * All rights reserved.
4*df930be7Sderaadt  *
5*df930be7Sderaadt  * Redistribution and use in source and binary forms, with or without
6*df930be7Sderaadt  * modification, are permitted provided that the following conditions
7*df930be7Sderaadt  * are met:
8*df930be7Sderaadt  * 1. Redistributions of source code must retain the above copyright
9*df930be7Sderaadt  *    notice, this list of conditions and the following disclaimer.
10*df930be7Sderaadt  * 2. Redistributions in binary form must reproduce the above copyright
11*df930be7Sderaadt  *    notice, this list of conditions and the following disclaimer in the
12*df930be7Sderaadt  *    documentation and/or other materials provided with the distribution.
13*df930be7Sderaadt  * 3. All advertising materials mentioning features or use of this software
14*df930be7Sderaadt  *    must display the following acknowledgement:
15*df930be7Sderaadt  *	This product includes software developed by the University of
16*df930be7Sderaadt  *	California, Berkeley and its contributors.
17*df930be7Sderaadt  * 4. Neither the name of the University nor the names of its contributors
18*df930be7Sderaadt  *    may be used to endorse or promote products derived from this software
19*df930be7Sderaadt  *    without specific prior written permission.
20*df930be7Sderaadt  *
21*df930be7Sderaadt  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22*df930be7Sderaadt  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23*df930be7Sderaadt  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24*df930be7Sderaadt  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25*df930be7Sderaadt  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26*df930be7Sderaadt  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27*df930be7Sderaadt  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28*df930be7Sderaadt  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29*df930be7Sderaadt  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30*df930be7Sderaadt  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31*df930be7Sderaadt  * SUCH DAMAGE.
32*df930be7Sderaadt  */
33*df930be7Sderaadt 
34*df930be7Sderaadt #if defined(LIBC_SCCS) && !defined(lint)
35*df930be7Sderaadt /*static char *sccsid = "from: @(#)sigcompat.c	5.3 (Berkeley) 2/24/91";*/
36*df930be7Sderaadt static char *rcsid = "$Id: sigcompat.c,v 1.1.1.1 1995/10/18 08:41:46 deraadt Exp $";
37*df930be7Sderaadt #endif /* LIBC_SCCS and not lint */
38*df930be7Sderaadt 
39*df930be7Sderaadt #include <sys/param.h>
40*df930be7Sderaadt #include <signal.h>
41*df930be7Sderaadt 
42*df930be7Sderaadt int
43*df930be7Sderaadt sigvec(signo, sv, osv)
44*df930be7Sderaadt 	int signo;
45*df930be7Sderaadt 	struct sigvec *sv, *osv;
46*df930be7Sderaadt {
47*df930be7Sderaadt 	int ret;
48*df930be7Sderaadt 	struct sigvec nsv;
49*df930be7Sderaadt 
50*df930be7Sderaadt 	if (sv) {
51*df930be7Sderaadt 		nsv = *sv;
52*df930be7Sderaadt 		nsv.sv_flags ^= SV_INTERRUPT;	/* !SA_INTERRUPT */
53*df930be7Sderaadt 	}
54*df930be7Sderaadt 	ret = sigaction(signo, sv ? (struct sigaction *)&nsv : NULL,
55*df930be7Sderaadt 	    (struct sigaction *)osv);
56*df930be7Sderaadt 	if (ret == 0 && osv)
57*df930be7Sderaadt 		osv->sv_flags ^= SV_INTERRUPT;	/* !SA_INTERRUPT */
58*df930be7Sderaadt 	return (ret);
59*df930be7Sderaadt }
60*df930be7Sderaadt 
61*df930be7Sderaadt int
62*df930be7Sderaadt sigsetmask(mask)
63*df930be7Sderaadt 	int mask;
64*df930be7Sderaadt {
65*df930be7Sderaadt 	int omask, n;
66*df930be7Sderaadt 
67*df930be7Sderaadt 	n = sigprocmask(SIG_SETMASK, (sigset_t *) &mask, (sigset_t *) &omask);
68*df930be7Sderaadt 	if (n)
69*df930be7Sderaadt 		return (n);
70*df930be7Sderaadt 	return (omask);
71*df930be7Sderaadt }
72*df930be7Sderaadt 
73*df930be7Sderaadt int
74*df930be7Sderaadt sigblock(mask)
75*df930be7Sderaadt 	int mask;
76*df930be7Sderaadt {
77*df930be7Sderaadt 	int omask, n;
78*df930be7Sderaadt 
79*df930be7Sderaadt 	n = sigprocmask(SIG_BLOCK, (sigset_t *) &mask, (sigset_t *) &omask);
80*df930be7Sderaadt 	if (n)
81*df930be7Sderaadt 		return (n);
82*df930be7Sderaadt 	return (omask);
83*df930be7Sderaadt }
84*df930be7Sderaadt 
85*df930be7Sderaadt int
86*df930be7Sderaadt sigpause(mask)
87*df930be7Sderaadt 	int mask;
88*df930be7Sderaadt {
89*df930be7Sderaadt 	return (sigsuspend((sigset_t *)&mask));
90*df930be7Sderaadt }
91