/* signal.c 4.3 85/03/11 */ /* * Almost backwards compatible signal. */ #include int (* signal(s, a))() int s, (*a)(); { struct sigvec osv, sv; static int mask[NSIG]; static int flags[NSIG]; sv.sv_handler = a; sv.sv_mask = mask[s]; sv.sv_flags = flags[s]; if (sigvec(s, &sv, &osv) < 0) return (BADSIG); if (sv.sv_mask != osv.sv_mask || sv.sv_flags != osv.sv_flags) { mask[s] = sv.sv_mask = osv.sv_mask; flags[s] = sv.sv_flags = osv.sv_flags; if (sigvec(s, &sv, 0) < 0) return (BADSIG); } return (osv.sv_handler); }