Date: Fri, 5 Apr 1996 12:00:49 +0200 (IST) From: Eli Zaretskii To: djgpp-workers AT delorie DOT com Subject: `sigaction' disables signal handlers Message-Id: Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII The current version of `sigaction' causes signal handlers to be disabled after a program saves and restores them. That's because it always returns SIG_DFL for any signal, even if a handler has been installed. (It even says ``FIXME'' there, which is what I do below.) The patches below also make `sigaction' return error indication whenever it should. (Anybody who is using Emacs compiled under v2.0, should install this patch, or else all the signals will kill Emacs after the first time you shell to DOS.) *** posix/signal/sigactio.c~0 Sun Apr 2 01:11:10 1995 --- posix/signal/sigactio.c Thu Apr 4 19:50:18 1996 *************** *** 1,19 **** /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ #include int sigaction(int _sig, const struct sigaction *_act, struct sigaction *_oact) { if (_oact) { /* FIXME */ ! _oact->sa_handler = SIG_DFL; ! sigemptyset(&_oact->sa_mask); _oact->sa_flags = 0; } if (_act) { ! signal(_sig, _act->sa_handler); } ! return 0; } --- 1,35 ---- /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ #include + #include int sigaction(int _sig, const struct sigaction *_act, struct sigaction *_oact) { + int retval = 0; + if (_oact) { + void (*installed_sig)(int) = signal (_sig, SIG_IGN); + /* FIXME */ ! if (installed_sig == SIG_ERR) ! { ! retval = -1; ! errno = EINVAL; ! } ! else ! signal (_sig, installed_sig); ! _oact->sa_handler = installed_sig; ! retval = sigemptyset(&_oact->sa_mask); _oact->sa_flags = 0; } if (_act) { ! if (signal(_sig, _act->sa_handler) == SIG_ERR) ! { ! retval = -1; ! errno = EINVAL; ! } } ! return retval; }