update for vnode interface
[unix-history] / usr / src / lib / libc / gen / signalsim.c
CommitLineData
98a25cff 1/* signalsim.c 4.4 84/11/04 */
e5a60e87
BJ
2
3/*
1669d3ec 4 * Almost backwards compatible signal.
e5a60e87 5 */
aa0c42e6 6#include <signal.h>
e5a60e87 7
98a25cff
KM
8enum {NATIVE = 0x0, UNKNOWN = 0x1, SIMULATE = 0x3} _sigsim = UNKNOWN;
9
aa0c42e6 10int (*
98a25cff 11signalsim(s, a))()
aa0c42e6 12 int s, (*a)();
e5a60e87 13{
aa0c42e6 14 struct sigvec osv, sv;
98a25cff
KM
15 int badcall();
16
17 switch (_sigsim) {
18 case UNKNOWN:
19 sv.sv_handler = badcall;
20 sv.sv_mask = sv.sv_onstack = 0;
21 if (sigvec(SIGSYS, &sv, &osv) < 0) {
22 _sigsim = SIMULATE;
23 } else {
24 _sigsim = NATIVE;
25 signal(SIGSYS, osv.sv_handler);
26 }
27 /* fall through */
28 case NATIVE:
29 case SIMULATE:
30 sv.sv_handler = a;
31 sv.sv_mask = sv.sv_onstack = 0;
32 if (sigvec(s, &sv, &osv) < 0)
33 return (BADSIG);
34 return (osv.sv_handler);
35 }
36}
e5a60e87 37
98a25cff
KM
38/*
39 * Signal call will trap to here if not implemented
40 */
41badcall()
42{
43 _sigsim = SIMULATE;
e5a60e87 44}