aboutsummaryrefslogtreecommitdiff
path: root/src/libmain/shared.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/libmain/shared.cc')
-rw-r--r--src/libmain/shared.cc15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/libmain/shared.cc b/src/libmain/shared.cc
index 24bedb3fb..17d4dda67 100644
--- a/src/libmain/shared.cc
+++ b/src/libmain/shared.cc
@@ -12,6 +12,12 @@ extern "C" {
#include "config.h"
+void sigintHandler(int signo)
+{
+ _isInterrupted = 1;
+}
+
+
/* Initialize and reorder arguments, then call the actual argument
processor. */
static void initAndRun(int argc, char * * argv)
@@ -23,6 +29,15 @@ static void initAndRun(int argc, char * * argv)
nixStateDir = (string) NIX_STATE_DIR;
nixDBPath = (string) NIX_STATE_DIR + "/db";
+ /* Catch SIGINT. */
+ struct sigaction act, oact;
+ act.sa_handler = sigintHandler;
+ sigfillset(&act.sa_mask);
+ act.sa_flags = 0;
+ if (sigaction(SIGINT, &act, &oact))
+ throw SysError("installing handler for SIGINT");
+ printMsg(lvlError, "SIG HANDLER INSTALLED");
+
/* Put the arguments in a vector. */
Strings args, remaining;
while (argc--) args.push_back(*argv++);