Fix nodes joining the VPN after tincctl top started.
This commit is contained in:
parent
311f60f4f0
commit
80ca91769d
3 changed files with 25 additions and 1 deletions
20
src/list.c
20
src/list.c
|
@ -111,6 +111,26 @@ list_node_t *list_insert_after(list_t *list, list_node_t *after, void *data) {
|
||||||
return node;
|
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) {
|
void list_unlink_node(list_t *list, list_node_t *node) {
|
||||||
if(node->prev)
|
if(node->prev)
|
||||||
node->prev->next = node->next;
|
node->prev->next = node->next;
|
||||||
|
|
|
@ -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_head(list_t *, void *);
|
||||||
extern list_node_t *list_insert_tail(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_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_unlink_node(list_t *, list_node_t *);
|
||||||
extern void list_delete_node(list_t *, list_node_t *);
|
extern void list_delete_node(list_t *, list_node_t *);
|
||||||
|
|
|
@ -108,7 +108,9 @@ static void update(int fd) {
|
||||||
} else {
|
} else {
|
||||||
found = xmalloc_and_zero(sizeof *found);
|
found = xmalloc_and_zero(sizeof *found);
|
||||||
found->name = xstrdup(name);
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -117,6 +119,7 @@ static void update(int fd) {
|
||||||
found = xmalloc_and_zero(sizeof *found);
|
found = xmalloc_and_zero(sizeof *found);
|
||||||
found->name = xstrdup(name);
|
found->name = xstrdup(name);
|
||||||
list_insert_tail(&node_list, found);
|
list_insert_tail(&node_list, found);
|
||||||
|
changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
found->known = true;
|
found->known = true;
|
||||||
|
|
Loading…
Reference in a new issue