diff options
author | Chet Ramey <chet.ramey@case.edu> | 2011-12-03 22:44:33 -0500 |
---|---|---|
committer | Chet Ramey <chet.ramey@case.edu> | 2011-12-03 22:44:33 -0500 |
commit | ac18b312307f11c383fd81a59e78991cdd099b7b (patch) | |
tree | e662fb8ab869166fa4dc1d6957d9ee6092071d47 /quit.h | |
parent | b317c077a10e51f6529a3267d03bc6b2c4a6f229 (diff) | |
download | bash-ac18b312307f11c383fd81a59e78991cdd099b7b.tar.gz |
commit bash-20060126 snapshot
Diffstat (limited to 'quit.h')
-rw-r--r-- | quit.h | 26 |
1 files changed, 21 insertions, 5 deletions
@@ -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_ */ |