diff options
| author | John Polstra <jdp@FreeBSD.org> | 1999-10-09 00:25:29 +0000 |
|---|---|---|
| committer | John Polstra <jdp@FreeBSD.org> | 1999-10-09 00:25:29 +0000 |
| commit | 2bc2b29270534caf13f0527c906137907ed32d7d (patch) | |
| tree | 892b1ba3a0867fa1bc316b5c54677de3f370ea9b /lib/libc | |
| parent | ee774a4d62b27c99093755442e48a41188e08bc0 (diff) | |
Notes
Diffstat (limited to 'lib/libc')
| -rw-r--r-- | lib/libc/compat-43/sigcompat.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/lib/libc/compat-43/sigcompat.c b/lib/libc/compat-43/sigcompat.c index 46431ef23044..0a870a759360 100644 --- a/lib/libc/compat-43/sigcompat.c +++ b/lib/libc/compat-43/sigcompat.c @@ -47,14 +47,25 @@ sigvec(signo, sv, osv) int signo; struct sigvec *sv, *osv; { + struct sigaction sa, osa; + struct sigaction *sap, *osap; int ret; - if (sv) - sv->sv_flags ^= SV_INTERRUPT; /* !SA_INTERRUPT */ - ret = osigaction(signo, (struct osigaction *)sv, - (struct osigaction *)osv); - if (ret == 0 && osv) - osv->sv_flags ^= SV_INTERRUPT; /* !SA_INTERRUPT */ + if (sv != NULL) { + sa.sa_handler = sv->sv_handler; + sa.sa_flags = sv->sv_flags ^ SV_INTERRUPT; + sigemptyset(&sa.sa_mask); + sa.sa_mask.__bits[0] = sv->sv_mask; + sap = &sa; + } else + sap = NULL; + osap = osv != NULL ? &osa : NULL; + ret = sigaction(signo, sap, osap); + if (ret == 0 && osv != NULL) { + osv->sv_handler = osa.sa_handler; + osv->sv_flags = osa.sa_flags ^ SV_INTERRUPT; + osv->sv_mask = osa.sa_mask.__bits[0]; + } return (ret); } |
