summaryrefslogtreecommitdiff
path: root/src/signal.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/signal.c')
-rw-r--r--src/signal.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/signal.c b/src/signal.c
new file mode 100644
index 0000000..e993ae3
--- /dev/null
+++ b/src/signal.c
@@ -0,0 +1,34 @@
+#include "signal.h"
+
+#include <string.h>
+
+sig_atomic_t signal_running;
+
+static void
+handle_signal_shutdown(int sig)
+{
+ signal_running = 0;
+}
+
+int
+signal_setup_actions()
+{
+ int rc;
+ struct sigaction action;
+
+ signal_running = 1;
+
+ memset(&action, 0, sizeof(action));
+ action.sa_handler = handle_signal_shutdown;
+ rc = sigemptyset(&action.sa_mask);
+ if(rc < 0) return rc;
+ rc = sigaction(SIGINT, &action, 0);
+ if(rc < 0) return rc;
+
+ rc = sigemptyset(&action.sa_mask);
+ if(rc < 0) return rc;
+ rc = sigaction(SIGTERM, &action, 0);
+ if(rc < 0) return rc;
+
+ return rc;
+}