mirror of
https://git.savannah.gnu.org/git/inetutils.git
synced 2026-01-12 00:19:39 +08:00
libinetutils/setsig.c: Incomplete replacement code.
No error checking; unjustified assumption on recovery of old signal mask; dropping of signal flags when activating SA_RESTART. All are portability issues.
This commit is contained in:
@@ -1,3 +1,12 @@
|
||||
2011-12-22 Mats Erik Andersson <gnu@gisladisker.se>
|
||||
|
||||
* libinetutils/setsig.c (setsig) [HAVE_SIGACTION]: New variable OSA.
|
||||
Superpose SA_RESTART on SA_FLAGS, no replacement! Use OSA for old
|
||||
signal mask in calling sigaction. Return SIG_ERR on error, or fetch
|
||||
old signal handler from OSA upon success.
|
||||
[HAVE_SIGVEC]: Likewise: New variable OSV. Use OSV in call to sigvec.
|
||||
Return SIG_ERR on error, or old handler brought in from OSV.
|
||||
|
||||
2011-12-20 Mats Erik Andersson <gnu@gisladisker.se>
|
||||
|
||||
* src/rlogind.c (rlogind_auth) [IP_OPTIONS]: Abort connection as soon
|
||||
|
||||
@@ -31,21 +31,23 @@ sighandler_t
|
||||
setsig (int sig, sighandler_t handler)
|
||||
{
|
||||
#ifdef HAVE_SIGACTION
|
||||
struct sigaction sa;
|
||||
struct sigaction sa, osa;
|
||||
sigemptyset (&sa.sa_mask);
|
||||
# ifdef SA_RESTART
|
||||
sa.sa_flags = SA_RESTART;
|
||||
sa.sa_flags |= SA_RESTART;
|
||||
# endif
|
||||
sa.sa_handler = handler;
|
||||
sigaction (sig, &sa, &sa);
|
||||
return sa.sa_handler;
|
||||
if (sigaction (sig, &sa, &osa) < 0)
|
||||
return SIG_ERR;
|
||||
return osa.sa_handler;
|
||||
#else /* !HAVE_SIGACTION */
|
||||
# ifdef HAVE_SIGVEC
|
||||
struct sigvec sv;
|
||||
struct sigvec sv, osv;
|
||||
sigemptyset (&sv.sv_mask);
|
||||
sv.sv_handler = handler;
|
||||
sigvec (sig, &sv, &sv);
|
||||
return sv.sv_handler;
|
||||
if (sigvec (sig, &sv, &osv) < 0)
|
||||
return SIG_ERR;
|
||||
return osv.sv_handler;
|
||||
# else /* !HAVE_SIGVEC */
|
||||
return signal (sig, handler);
|
||||
# endif /* HAVE_SIGVEC */
|
||||
|
||||
Reference in New Issue
Block a user