summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2021-03-05 18:58:12 +0100
committerDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2021-03-06 22:08:36 +0100
commit919d1e85f2cc17059f72db48c3bc38e0b524f6c0 (patch)
treecac9b227ee4edac72b7c850370c23cbcf68d3d93 /lib
parent02db0ae8ff83a42913b1b4224ccd8377f5fc5323 (diff)
Add a context pointer to the rbtree key comparison
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'lib')
-rw-r--r--lib/common/hardlink.c3
-rw-r--r--lib/util/rbtree.c6
2 files changed, 5 insertions, 4 deletions
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;