diff options
Diffstat (limited to 'main/musl/0016-fix-tdelete-to-properly-balance-the-tree.patch')
-rw-r--r-- | main/musl/0016-fix-tdelete-to-properly-balance-the-tree.patch | 53 |
1 files changed, 0 insertions, 53 deletions
diff --git a/main/musl/0016-fix-tdelete-to-properly-balance-the-tree.patch b/main/musl/0016-fix-tdelete-to-properly-balance-the-tree.patch deleted file mode 100644 index bb3c79cfbf..0000000000 --- a/main/musl/0016-fix-tdelete-to-properly-balance-the-tree.patch +++ /dev/null @@ -1,53 +0,0 @@ -From e4f9d811684011d8a67e363827de39d5f2d3ae5a Mon Sep 17 00:00:00 2001 -From: Szabolcs Nagy <nsz@port70.net> -Date: Sat, 5 Dec 2015 21:02:34 +0100 -Subject: [PATCH] fix tdelete to properly balance the tree - -the tsearch data structure is an avl tree, but it did not implement -the deletion operation correctly so the tree could become unbalanced. - -reported by Ed Schouten. ---- - src/search/tsearch_avl.c | 19 ++++++++++++++----- - 1 file changed, 14 insertions(+), 5 deletions(-) - -diff --git a/src/search/tsearch_avl.c b/src/search/tsearch_avl.c -index 8620092..0864460 100644 ---- a/src/search/tsearch_avl.c -+++ b/src/search/tsearch_avl.c -@@ -105,10 +105,13 @@ static struct node *insert(struct node **n, const void *k, - return r; - } - --static struct node *movr(struct node *n, struct node *r) { -- if (!n) -- return r; -- n->right = movr(n->right, r); -+static struct node *remove_rightmost(struct node *n, struct node **rightmost) -+{ -+ if (!n->right) { -+ *rightmost = n; -+ return n->left; -+ } -+ n->right = remove_rightmost(n->right, rightmost); - return balance(n); - } - -@@ -122,7 +125,13 @@ static struct node *remove(struct node **n, const void *k, - c = cmp(k, (*n)->key); - if (c == 0) { - struct node *r = *n; -- *n = movr(r->left, r->right); -+ if (r->left) { -+ r->left = remove_rightmost(r->left, n); -+ (*n)->left = r->left; -+ (*n)->right = r->right; -+ *n = balance(*n); -+ } else -+ *n = r->right; - free(r); - return parent; - } --- -2.7.0 - |