diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2017-11-10 09:50:27 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2017-11-10 09:50:27 +0200 |
commit | b1258b6d6e9e0482b37e86977ffc779e14c75b9f (patch) | |
tree | e84c46aaa6675fbd574013e50b854866df734ce6 /src | |
parent | 6020d6243c7fdf657da768b3fb2efa1244665d51 (diff) | |
download | grecs-b1258b6d6e9e0482b37e86977ffc779e14c75b9f.tar.gz grecs-b1258b6d6e9e0482b37e86977ffc779e14c75b9f.tar.bz2 |
Fix 5938aedc.
* src/tree.c (grecs_node_unlink): Partially revert 5938aedc.
(node_merge_block): Fix prev link.
Diffstat (limited to 'src')
-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; } |