diff options
author | John Wiegley <johnw@newartisans.com> | 2009-02-04 20:46:08 -0400 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2009-02-04 20:46:08 -0400 |
commit | 863b5d814443eb791c2dd07250ac0ae29054adb0 (patch) | |
tree | c7c1f0e284c4589c510d8d1efedc18045481bedd /src/utils.h | |
parent | 04ac5ffcb4ae27ad85f9ab31227d16770d8f7e6e (diff) | |
download | fork-ledger-863b5d814443eb791c2dd07250ac0ae29054adb0.tar.gz fork-ledger-863b5d814443eb791c2dd07250ac0ae29054adb0.tar.bz2 fork-ledger-863b5d814443eb791c2dd07250ac0ae29054adb0.zip |
Added proper handling of SIGINT (C-c) and SIGPIPE (pager quits).
Diffstat (limited to 'src/utils.h')
-rw-r--r-- | src/utils.h | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/utils.h b/src/utils.h index 41142624..23ae10c7 100644 --- a/src/utils.h +++ b/src/utils.h @@ -475,6 +475,28 @@ void finish_timer(const char * name); #include "stream.h" #include "pushvar.h" +enum caught_signal_t { + NONE_CAUGHT, + INTERRUPTED, + PIPE_CLOSED +}; + +extern caught_signal_t caught_signal; + +void sigint_handler(int sig); +void sigpipe_handler(int sig); + +inline void check_for_signal() { + switch (caught_signal) { + case NONE_CAUGHT: + break; + case INTERRUPTED: + throw std::runtime_error("Interrupted by user (use Control-D to quit)"); + case PIPE_CLOSED: + throw std::runtime_error("Pipe terminated"); + } +} + /** * @name General utility functions */ |