#include <string.h>
#include "interrupt.h"
-Flag *interrupt;
-static struct sigaction sa = {0};
+Flag interrupt;
+
+#ifdef _WIN32
+
+// just the signals we need, for Win32
+static const char *strsignal(int sig)
+{
+ switch (sig) {
+ case SIGINT:
+ return "Interrupted";
+
+ case SIGTERM:
+ return "Terminated";
+
+ default:
+ return "Unknown signal";
+ }
+}
+
+#endif // _WIN32
static void interrupt_handler(int sig)
{
fprintf(stderr, "%s\n", strsignal(sig));
- flag_set(interrupt);
+ flag_set(&interrupt);
}
void interrupt_init()
{
- interrupt = flag_create();
+ flag_ini(&interrupt);
+#ifdef _WIN32
+ signal(SIGINT, interrupt_handler);
+ signal(SIGTERM, interrupt_handler);
+#else // _WIN32
+ struct sigaction sa = {0};
sa.sa_handler = &interrupt_handler;
sigaction(SIGINT, &sa, NULL);
sigaction(SIGTERM, &sa, NULL);
+#endif // _WIN32
}
void interrupt_deinit()
{
- flag_delete(interrupt);
+ flag_dst(&interrupt);
}