aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrumeet <yuuta@yuuta.moe>2022-07-22 20:11:05 -0700
committerTrumeet <yuuta@yuuta.moe>2022-07-22 20:11:05 -0700
commite98bf93cbe4a714c6cb127e78fbd577bbab654c9 (patch)
tree04a8f5122bba89476f6b4212b672001f3f7ca859
parent5995bcf5f672bc96f49ce7bde53ee864b5fe1e14 (diff)
downloadacron-e98bf93cbe4a714c6cb127e78fbd577bbab654c9.tar
acron-e98bf93cbe4a714c6cb127e78fbd577bbab654c9.tar.gz
acron-e98bf93cbe4a714c6cb127e78fbd577bbab654c9.tar.bz2
acron-e98bf93cbe4a714c6cb127e78fbd577bbab654c9.zip
feat(acronc): set SIGINT and SIGTERM handlers on Unix
Otherwise ASAN does not seem to run (if terminated). Signed-off-by: Trumeet <yuuta@yuuta.moe>
-rw-r--r--client/libacron/acronc/main.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/client/libacron/acronc/main.c b/client/libacron/acronc/main.c
index cbc359e..21612d8 100644
--- a/client/libacron/acronc/main.c
+++ b/client/libacron/acronc/main.c
@@ -8,6 +8,10 @@
#ifdef WIN32
#include <winsock2.h>
#include <windef.h>
+#else
+#include <signal.h>
+#include <errno.h>
+#include <string.h>
#endif
static const char *world_name(const enum ac_world world) {
@@ -121,9 +125,29 @@ static void handle_response(const ac_response_t *response) {
}
}
+#ifndef WIN32
+static void intr(int signum) {}
+#endif
+
int main(int argc, char **argv) {
int r;
#ifdef WIN32
+ fprintf(stderr, "Warning: ^C handler on Windows is not yet available.");
+#else
+ struct sigaction sa;
+ sa.sa_handler = intr;
+ sigemptyset(&sa.sa_mask);
+ sa.sa_flags = 0;
+ if (sigaction(SIGINT, &sa, NULL) ||
+ sigaction(SIGTERM, &sa, NULL)) {
+ const int e = errno;
+ fprintf(stderr, "Cannot set SIGINT or SIGTERM handlers: %s (%d).\n",
+ strerror(e),
+ e);
+ return e;
+ }
+#endif
+#ifdef WIN32
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(2, 2);