1*22111Smckusick /* 2*22111Smckusick * Copyright (c) 1985 Regents of the University of California. 3*22111Smckusick * All rights reserved. The Berkeley software License Agreement 4*22111Smckusick * specifies the terms and conditions for redistribution. 5*22111Smckusick */ 618296Smckusick 7*22111Smckusick #ifndef lint 8*22111Smckusick static char sccsid[] = "@(#)signal.c 5.1 (Berkeley) 06/05/85"; 9*22111Smckusick #endif not lint 10*22111Smckusick 1116498Sralph /* 1216498Sralph * Almost backwards compatible signal. 1316498Sralph */ 1418296Smckusick #include <signal.h> 1516498Sralph 1618296Smckusick int (* 1718296Smckusick signal(s, a))() 1818296Smckusick int s, (*a)(); 1918296Smckusick { 2018296Smckusick struct sigvec osv, sv; 2118296Smckusick static int mask[NSIG]; 2218296Smckusick static int flags[NSIG]; 2318296Smckusick 2418296Smckusick sv.sv_handler = a; 2518296Smckusick sv.sv_mask = mask[s]; 2618296Smckusick sv.sv_flags = flags[s]; 2718296Smckusick if (sigvec(s, &sv, &osv) < 0) 2818296Smckusick return (BADSIG); 2918296Smckusick if (sv.sv_mask != osv.sv_mask || sv.sv_flags != osv.sv_flags) { 3018296Smckusick mask[s] = sv.sv_mask = osv.sv_mask; 3118296Smckusick flags[s] = sv.sv_flags = osv.sv_flags; 3218296Smckusick if (sigvec(s, &sv, 0) < 0) 3318296Smckusick return (BADSIG); 3418296Smckusick } 3518296Smckusick return (osv.sv_handler); 3618296Smckusick } 37