From 919d1e85f2cc17059f72db48c3bc38e0b524f6c0 Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Fri, 5 Mar 2021 18:58:12 +0100 Subject: Add a context pointer to the rbtree key comparison Signed-off-by: David Oberhollenzer --- lib/common/hardlink.c | 3 ++- lib/util/rbtree.c | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) (limited to 'lib') diff --git a/lib/common/hardlink.c b/lib/common/hardlink.c index 63621a4..678a7a3 100644 --- a/lib/common/hardlink.c +++ b/lib/common/hardlink.c @@ -71,9 +71,10 @@ fail_insert: return -1; } -static int compare_inum(const void *lhs, const void *rhs) +static int compare_inum(const void *ctx, const void *lhs, const void *rhs) { sqfs_u32 l = *((sqfs_u32 *)lhs), r = *((sqfs_u32 *)rhs); + (void)ctx; return l < r ? -1 : (l > r ? 1 : 0); } diff --git a/lib/util/rbtree.c b/lib/util/rbtree.c index 873add8..d8f1305 100644 --- a/lib/util/rbtree.c +++ b/lib/util/rbtree.c @@ -80,7 +80,7 @@ static rbtree_node_t *subtree_insert(rbtree_t *tree, rbtree_node_t *root, if (root == NULL) return new; - if (tree->key_compare(new->data, root->data) < 0) { + if (tree->key_compare(tree->key_context, new->data, root->data) < 0) { root->left = subtree_insert(tree, root->left, new); } else { root->right = subtree_insert(tree, root->right, new); @@ -139,7 +139,7 @@ static rbtree_node_t *copy_node(const rbtree_t *t, const rbtree_node_t *n) } int rbtree_init(rbtree_t *tree, size_t keysize, size_t valuesize, - int(*key_compare)(const void *, const void *)) + int(*key_compare)(const void *, const void *, const void *)) { size_t diff, size; @@ -220,7 +220,7 @@ rbtree_node_t *rbtree_lookup(const rbtree_t *tree, const void *key) int ret; while (node != NULL) { - ret = tree->key_compare(key, node->data); + ret = tree->key_compare(tree->key_context, key, node->data); if (ret == 0) break; -- cgit v1.2.3