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/main.cc | |
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/main.cc')
-rw-r--r-- | src/main.cc | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/main.cc b/src/main.cc index 221374c0..06ce8563 100644 --- a/src/main.cc +++ b/src/main.cc @@ -57,11 +57,6 @@ namespace { return s; } - void sigint_handler(int sig) - { - throw std::logic_error("Interrupted by user (use Control-D to quit)"); - } - strings_list split_arguments(char * line) { strings_list args; @@ -177,12 +172,16 @@ namespace { catch (const std::exception& err) { std::cout.flush(); // first display anything that was pending - // Display any pending error context information - string context = error_context(); - if (! context.empty()) - std::cerr << context << std::endl; + if (caught_signal == NONE_CAUGHT) { + // Display any pending error context information + string context = error_context(); + if (! context.empty()) + std::cerr << context << std::endl; - std::cerr << "Error: " << err.what() << std::endl; + std::cerr << "Error: " << err.what() << std::endl; + } else { + caught_signal = NONE_CAUGHT; + } } catch (int _status) { status = _status; // used for a "quick" exit, and is used only @@ -226,6 +225,7 @@ int main(int argc, char * argv[], char * envp[]) session->option_version(*session); std::signal(SIGINT, sigint_handler); + std::signal(SIGPIPE, sigpipe_handler); #ifdef HAVE_LIBEDIT |