summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2004-10-05 03:17:48 +0000
committerDimitri Sokolyuk <demon@dim13.org>2004-10-05 03:17:48 +0000
commit8fa954da6d2d1bc7d9466e675c423076e1a5aee4 (patch)
treeb874c96834901da92b391c7da4b925218e00f917
parent1bbab9c2d6f8663f1bbefdc1b0e0871537bc4561 (diff)
add signal handling, cleanup
-rw-r--r--main.c35
-rw-r--r--main.h2
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 <stdio.h>
#include <curses.h>
+#include <signal.h>
+#include <stdio.h>
#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 <interface>\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 <interface>\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);