From 80ca91769d48e546d3e4cde03c2eb2820c03acc4 Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Thu, 2 Jun 2011 21:14:50 +0200 Subject: [PATCH] Fix nodes joining the VPN after tincctl top started. --- src/list.c | 20 ++++++++++++++++++++ src/list.h | 1 + src/top.c | 5 ++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/list.c b/src/list.c index 9d4920b7..9b677911 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 a4580399..4fe48dbe 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 62c46f5d..dc1fecf3 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; -- 2.20.1