diff options
Diffstat (limited to 'client/libacron/acronc')
-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); |