aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/tree.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/tree.c b/src/tree.c
index 307682c..e25c6a5 100644
--- a/src/tree.c
+++ b/src/tree.c
@@ -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;
}

Return to:

Send suggestions and report system problems to the System administrator.