#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"
static const char *punit = "pkts";
static float pscale = 1;
-static void update(int fd) {
- sendline(fd, "%d %d", CONTROL, REQ_DUMP_TRAFFIC);
+static bool update(int fd) {
+ if(!sendline(fd, "%d %d", CONTROL, REQ_DUMP_TRAFFIC))
+ return false;
+
gettimeofday(&cur, NULL);
timersub(&cur, &prev, &diff);
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;
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;
}
if(!found) {
- found = xmalloc_and_zero(sizeof *found);
+ found = xzalloc(sizeof *found);
found->name = xstrdup(name);
list_insert_tail(&node_list, found);
changed = true;
found->out_packets = out_packets;
found->out_bytes = out_bytes;
}
+
+ return false;
}
static int cmpfloat(float a, float b) {
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];
bool running = true;
while(running) {
- update(fd);
+ if(!update(fd))
+ break;
+
redraw();
switch(getch()) {