diff options
-rw-r--r-- | src/tree.c | 10 |
1 files changed, 7 insertions, 3 deletions
@@ -120,16 +120,17 @@ grecs_node_bind(struct grecs_node *master, struct grecs_node *node, int dn) int grecs_node_unlink(struct grecs_node *node) { - if (node->up && node->up->down == node) - node->up->down = node->prev; if (node->prev) node->prev->next = node->next; + else if (node->up) + node->up->down = node->next; + else + return 1; if (node->next) node->next->prev = node->prev; node->up = node->prev = node->next = NULL; return 0; } - static void listel_dispose(void *el) @@ -1089,7 +1090,10 @@ node_merge_block(struct grecs_node *to_node, struct grecs_node *from_node, if (!sp->next) break; } + sp->next = to_node->down; + to_node->down->prev = sp; + to_node->down = from_node->down; from_node->down = NULL; } |