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