summaryrefslogtreecommitdiff
path: root/src/utils.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils.h')
-rw-r--r--src/utils.h22
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
*/