From 2d698b6e42d8dca191ac795ef5dba3bf62496eec Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Fri, 9 Apr 2010 16:13:32 -0700 Subject: Integrate bash 3.2 version This is merge of current Debian stable (Lenny) version of Bash with Vyatta changes. --- quit.h | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) (limited to 'quit.h') diff --git a/quit.h b/quit.h index 31b2765..a335439 100644 --- a/quit.h +++ b/quit.h @@ -22,11 +22,19 @@ #define _QUIT_H_ /* Non-zero means SIGINT has already ocurred. */ -extern int interrupt_state; - -/* Macro to call a great deal. SIGINT just sets above variable. When - it is safe, put QUIT in the code, and the "interrupt" will take place. */ -#define QUIT if (interrupt_state) throw_to_top_level () +extern volatile int interrupt_state; +extern volatile int terminating_signal; + +/* Macro to call a great deal. SIGINT just sets the interrupt_state variable. + When it is safe, put QUIT in the code, and the "interrupt" will take + place. The same scheme is used for terminating signals (e.g., SIGHUP) + and the terminating_signal variable. That calls a function which will + end up exiting the shell. */ +#define QUIT \ + do { \ + if (terminating_signal) termsig_handler (terminating_signal); \ + if (interrupt_state) throw_to_top_level (); \ + } while (0) #define SETINTERRUPT interrupt_state = 1 #define CLRINTERRUPT interrupt_state = 0 @@ -34,4 +42,12 @@ extern int interrupt_state; #define ADDINTERRUPT interrupt_state++ #define DELINTERRUPT interrupt_state-- +/* The same sort of thing, this time just for signals that would ordinarily + cause the shell to terminate. */ + +#define CHECK_TERMSIG \ + do { \ + if (terminating_signal) termsig_handler (terminating_signal); \ + } while (0) + #endif /* _QUIT_H_ */ -- cgit v1.2.3