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