From: Guus Sliepen Date: Thu, 2 Jun 2011 19:14:50 +0000 (+0200) Subject: Fix nodes joining the VPN after tincctl top started. X-Git-Tag: release-1.1pre1~20 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=80ca91769d48e546d3e4cde03c2eb2820c03acc4;p=oweals%2Ftinc.git Fix nodes joining the VPN after tincctl top started. --- diff --git a/src/list.c b/src/list.c index 9d4920b..9b67791 100644 --- a/src/list.c +++ b/src/list.c @@ -111,6 +111,26 @@ list_node_t *list_insert_after(list_t *list, list_node_t *after, void *data) { return node; } +list_node_t *list_insert_before(list_t *list, list_node_t *before, void *data) { + list_node_t *node; + + node = list_alloc_node(); + + node->data = data; + node->next = before; + node->prev = before->prev; + before->prev = node; + + if(node->prev) + node->prev->next = node; + else + list->head = node; + + list->count++; + + return node; +} + void list_unlink_node(list_t *list, list_node_t *node) { if(node->prev) node->prev->next = node->next; diff --git a/src/list.h b/src/list.h index a458039..4fe48db 100644 --- a/src/list.h +++ b/src/list.h @@ -55,6 +55,7 @@ extern void list_free_node(list_t *, list_node_t *); extern list_node_t *list_insert_head(list_t *, void *); extern list_node_t *list_insert_tail(list_t *, void *); extern list_node_t *list_insert_after(list_t *, list_node_t *, void *); +extern list_node_t *list_insert_before(list_t *, list_node_t *, void *); extern void list_unlink_node(list_t *, list_node_t *); extern void list_delete_node(list_t *, list_node_t *); diff --git a/src/top.c b/src/top.c index 62c46f5..dc1fecf 100644 --- a/src/top.c +++ b/src/top.c @@ -108,7 +108,9 @@ static void update(int fd) { } else { found = xmalloc_and_zero(sizeof *found); found->name = xstrdup(name); - list_insert_after(&node_list, i, found); + fprintf(stderr, "Inserting %s before %s\n", found->name, node->name); + list_insert_before(&node_list, i, found); + changed = true; break; } } @@ -117,6 +119,7 @@ static void update(int fd) { found = xmalloc_and_zero(sizeof *found); found->name = xstrdup(name); list_insert_tail(&node_list, found); + changed = true; } found->known = true;