From 9e53ccfefd2433452fdfa2bbe2ece903c0afb790 Mon Sep 17 00:00:00 2001 From: Franklin Wei Date: Fri, 22 May 2015 21:20:44 -0400 Subject: support ctrl-c --- src/globals.h | 2 ++ src/main.c | 10 +++++++--- src/util.c | 7 +++++++ 3 files changed, 16 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/globals.h b/src/globals.h index b85ecc0..ee6790f 100644 --- a/src/globals.h +++ b/src/globals.h @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -110,6 +111,7 @@ void load_portfolio(struct player_t*, const char*); void print_history(struct stock_t*); void print_usage(int argc, char *argv[]); void print_version(void); +void sig_handler(int); int output(const char*, ...); void buy_handler(struct player_t*); diff --git a/src/main.c b/src/main.c index c3c4a70..41aa920 100644 --- a/src/main.c +++ b/src/main.c @@ -13,15 +13,19 @@ int main(int argc, char *argv[]) curl_global_init(CURL_GLOBAL_DEFAULT); - atexit(cleanup); - initscr(); echo(); nocbreak(); nl(); scrollok(stdscr, true); - atexit(endwin); + atexit(cleanup); + + const struct sigaction handler = { + .sa_handler = sig_handler + }; + + sigaction(SIGINT, &handler, NULL); struct player_t *player = malloc(sizeof(struct player_t)); memset(player, 0, sizeof(struct player_t)); diff --git a/src/util.c b/src/util.c index a198d19..f0493cd 100644 --- a/src/util.c +++ b/src/util.c @@ -6,6 +6,13 @@ void cleanup(void) { curl_global_cleanup(); + endwin(); +} + +void sig_handler(int sig) +{ + cleanup(); + exit(EXIT_FAILURE); } struct data_buffer_t { -- cgit v1.1