]> git.lizzy.rs Git - dragonblocks_alpha.git/blob - src/interrupt.c
Add win32 workaround for signal code
[dragonblocks_alpha.git] / src / interrupt.c
1 #include <signal.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include "interrupt.h"
5
6 Flag interrupt;
7
8 #ifdef _WIN32
9
10 // just the signals we need, for Win32
11 static const char *strsignal(int sig)
12 {
13         switch (sig) {
14                 case SIGINT:
15                         return "Interrupted";
16
17                 case SIGTERM:
18                         return "Terminated";
19
20                 default:
21                         return "Unknown signal";
22         }
23 }
24
25 #endif // _WIN32
26
27 static void interrupt_handler(int sig)
28 {
29         fprintf(stderr, "%s\n", strsignal(sig));
30         flag_set(&interrupt);
31 }
32
33 void interrupt_init()
34 {
35         flag_ini(&interrupt);
36
37 #ifdef _WIN32
38         signal(SIGINT, interrupt_handler);
39         signal(SIGTERM, interrupt_handler);
40 #else // _WIN32
41         struct sigaction sa = {0};
42         sa.sa_handler = &interrupt_handler;
43         sigaction(SIGINT, &sa, NULL);
44         sigaction(SIGTERM, &sa, NULL);
45 #endif // _WIN32
46 }
47
48 void interrupt_deinit()
49 {
50         flag_dst(&interrupt);
51 }