diff --git a/src/signal_handler.c b/src/signal_handler.c index 59fffddf13dd24de29a03780bcae0fa046c7208a..1136129fd6efa0f25ddc91ccb77edfc008829240 100644 --- a/src/signal_handler.c +++ b/src/signal_handler.c @@ -23,7 +23,7 @@ #include "builtin_functions.h" #include <signal.h> -RCSID("$Id: signal_handler.c,v 1.118 1999/03/13 21:04:05 grubba Exp $"); +RCSID("$Id: signal_handler.c,v 1.119 1999/04/02 02:22:26 hubbe Exp $"); #ifdef HAVE_PASSWD_H # include <passwd.h> @@ -449,9 +449,27 @@ void check_signals(struct callback *foo, void *bar, void *gazonk) } #endif - push_int(sigbuf[lastsig]); - apply_svalue(signal_callbacks + sigbuf[lastsig], 1); - pop_stack(); + if(IS_ZERO(signal_callbacks + sigbuf[lastsig])) + { + switch(sigbuf[lastsig]) + { +#ifdef SIGINT + case SIGINT: +#endif +#ifdef SIGHUP + case SIGHUP: +#endif +#ifdef SIGQUIT + case SIGQUIT: +#endif + push_int(1); + f_exit(1); + } + }else{ + push_int(sigbuf[lastsig]); + apply_svalue(signal_callbacks + sigbuf[lastsig], 1); + pop_stack(); + } } UNSET_ONERROR(ebuf); @@ -538,6 +556,18 @@ static void f_signal(int args) break; #endif +#ifdef SIGHUP + case SIGHUP: +#endif +#ifdef SIGINT + case SIGINT: +#endif +#ifdef SIGQUIT + case SIGQUIT: +#endif + func=receive_signal; + break; + default: func=(sigfunctype) SIG_DFL; } @@ -2693,6 +2723,18 @@ void init_signals(void) my_signal(SIGFPE, SIG_IGN); #endif +#ifdef SIGINT + my_signal(SIGINT, receive_signal); +#endif + +#ifdef SIGHUP + my_signal(SIGHUP, receive_signal); +#endif + +#ifdef SIGQUIT + my_signal(SIGQUIT, receive_signal); +#endif + for(e=0;e<MAX_SIGNALS;e++) signal_callbacks[e].type=T_INT;