From 8fa954da6d2d1bc7d9466e675c423076e1a5aee4 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 5 Oct 2004 03:17:48 +0000 Subject: add signal handling, cleanup --- main.c | 35 ++++++++++++++++++++++++++--------- main.h | 2 ++ 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/main.c b/main.c index 2c1eaa6..a1a471a 100644 --- a/main.c +++ b/main.c @@ -15,10 +15,13 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include #include +#include +#include #include "main.h" +int f_die = 0; + int main(int argc, char **argv) { extern struct ifdata ifdata; struct ifdata last; @@ -26,12 +29,12 @@ int main(int argc, char **argv) { char *arg; - if(argv[1]) + if(argv[1] != NULL && argc == 2) arg = argv[1]; - else { - (void)fprintf(stderr, "usage: %s \n", __progname); - exit(2); - } + else + usage(); + + signal(SIGINT, die); initscr(); curs_set(0); @@ -40,7 +43,7 @@ int main(int argc, char **argv) { if_stat(); last = ifdata; - while(1) { + while(f_die == 0) { if_stat(); diff.ibytes = ifdata.ibytes - last.ibytes; diff.obytes = ifdata.obytes - last.obytes; @@ -56,8 +59,22 @@ int main(int argc, char **argv) { } int error(char *message) { - (void)fprintf(stderr, "%s: %s\n", __progname, message); if_fini(); endwin(); - exit(1); + (void)fprintf(stderr, "%s: %s\n", __progname, message); + exit(-1); +} + +void +die(int ignored) +{ + (void) ignored; + f_die = 1; +} + +__dead void +usage(void) +{ + (void) fprintf(stderr, "usage: %s \n", __progname); + exit(1); } diff --git a/main.h b/main.h index a3475b2..1185cca 100644 --- a/main.h +++ b/main.h @@ -39,3 +39,5 @@ int if_fini(void); int out(struct ifdata *); int error(char *); +void die(int); +__dead void usage(void); -- cgit v1.2.3