diff options
author | Trumeet <yuuta@yuuta.moe> | 2022-07-22 20:11:05 -0700 |
---|---|---|
committer | Trumeet <yuuta@yuuta.moe> | 2022-07-22 20:11:05 -0700 |
commit | e98bf93cbe4a714c6cb127e78fbd577bbab654c9 (patch) | |
tree | 04a8f5122bba89476f6b4212b672001f3f7ca859 | |
parent | 5995bcf5f672bc96f49ce7bde53ee864b5fe1e14 (diff) | |
download | acron-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.c | 24 |
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); |