1*18296Smckusick /* signal.c 4.3 85/03/11 */ 2*18296Smckusick 316498Sralph /* 416498Sralph * Almost backwards compatible signal. 516498Sralph */ 6*18296Smckusick #include <signal.h> 716498Sralph 8*18296Smckusick int (* 9*18296Smckusick signal(s, a))() 10*18296Smckusick int s, (*a)(); 11*18296Smckusick { 12*18296Smckusick struct sigvec osv, sv; 13*18296Smckusick static int mask[NSIG]; 14*18296Smckusick static int flags[NSIG]; 15*18296Smckusick 16*18296Smckusick sv.sv_handler = a; 17*18296Smckusick sv.sv_mask = mask[s]; 18*18296Smckusick sv.sv_flags = flags[s]; 19*18296Smckusick if (sigvec(s, &sv, &osv) < 0) 20*18296Smckusick return (BADSIG); 21*18296Smckusick if (sv.sv_mask != osv.sv_mask || sv.sv_flags != osv.sv_flags) { 22*18296Smckusick mask[s] = sv.sv_mask = osv.sv_mask; 23*18296Smckusick flags[s] = sv.sv_flags = osv.sv_flags; 24*18296Smckusick if (sigvec(s, &sv, 0) < 0) 25*18296Smckusick return (BADSIG); 26*18296Smckusick } 27*18296Smckusick return (osv.sv_handler); 28*18296Smckusick } 29