tinc-gui: Reformat codebase according to PEP8
[tinc] / src / top.c
index aafc2a4..40b8047 100644 (file)
--- a/src/top.c
+++ b/src/top.c
@@ -1,6 +1,6 @@
 /*
     top.c -- Show real-time statistics from a running tincd
-    Copyright (C) 2011-2012 Guus Sliepen <guus@tinc-vpn.org>
+    Copyright (C) 2011-2013 Guus Sliepen <guus@tinc-vpn.org>
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -21,6 +21,7 @@
 
 #ifdef HAVE_CURSES
 
+#undef KEY_EVENT  /* There are conflicting declarations for KEY_EVENT in Windows wincon.h and curses.h. */
 #include <curses.h>
 
 #include "control_common.h"
@@ -66,12 +67,10 @@ static float bscale = 1;
 static const char *punit = "pkts";
 static float pscale = 1;
 
-#ifndef timersub
-#define timersub(a, b, c) do {(c)->tv_sec = (a)->tv_sec - (b)->tv_sec; (c)->tv_usec = (a)->tv_usec = (b)->tv_usec;} while(0)
-#endif
+static bool update(int fd) {
+       if(!sendline(fd, "%d %d", CONTROL, REQ_DUMP_TRAFFIC))
+               return false;
 
-static void update(int fd) {
-       sendline(fd, "%d %d", CONTROL, REQ_DUMP_TRAFFIC);
        gettimeofday(&cur, NULL);
 
        timersub(&cur, &prev, &diff);
@@ -94,13 +93,10 @@ static void update(int fd) {
                int n = sscanf(line, "%d %d %s %"PRIu64" %"PRIu64" %"PRIu64" %"PRIu64, &code, &req, name, &in_packets, &in_bytes, &out_packets, &out_bytes);
 
                if(n == 2)
-                       break;
+                       return true;
 
-               if(n != 7) {
-                       endwin();
-                       fprintf(stderr, "Error receiving traffic information\n");
-                       exit(1);
-               }
+               if(n != 7)
+                       return false;
 
                nodestats_t *found = NULL;
 
@@ -112,7 +108,7 @@ static void update(int fd) {
                                found = ns;
                                break;
                        } else {
-                               found = xmalloc_and_zero(sizeof *found);
+                               found = xzalloc(sizeof *found);
                                found->name = xstrdup(name);
                                list_insert_before(&node_list, node, found);
                                changed = true;
@@ -121,7 +117,7 @@ static void update(int fd) {
                }
 
                if(!found) {
-                       found = xmalloc_and_zero(sizeof *found);
+                       found = xzalloc(sizeof *found);
                        found->name = xstrdup(name);
                        list_insert_tail(&node_list, found);
                        changed = true;
@@ -137,6 +133,8 @@ static void update(int fd) {
                found->out_packets = out_packets;
                found->out_bytes = out_bytes;
        }
+
+       return false;
 }
 
 static int cmpfloat(float a, float b) {
@@ -217,7 +215,8 @@ static void redraw(void) {
        for(int i = 0; i < n; i++)
                sorted[i]->i = i;
 
-       qsort(sorted, n, sizeof *sorted, sortfunc);
+       if(sorted)
+               qsort(sorted, n, sizeof *sorted, sortfunc);
 
        for(int i = 0, row = 3; i < n; i++, row++) {
                nodestats_t *node = sorted[i];
@@ -249,7 +248,9 @@ void top(int fd) {
        bool running = true;
 
        while(running) {
-               update(fd);
+               if(!update(fd))
+                       break;
+
                redraw();
 
                switch(getch()) {