diff --git a/src/rbtree.c b/src/rbtree.c index 08439cb..d253ea6 100644 --- a/src/rbtree.c +++ b/src/rbtree.c @@ -86,7 +86,7 @@ inline int rbtree_is_empty(rbtree *tree) { /* * Searches a tree by key. */ -rbnode* rbtree_search(rbtree *tree, const void *key) { +void* rbtree_search(rbtree *tree, const void *key) { rbnode *n; @@ -99,12 +99,11 @@ rbnode* rbtree_search(rbtree *tree, const void *key) { int cmp = tree->cmp_fn(n->key, key); if (cmp == 0) - break; + return (void *) n->key; n = n->child[cmp < 0]; } - - return n; + return NULL; } void rbtree_walk(rbtree *tree, void (*action)(rbnode *)) { diff --git a/src/rbtree.h b/src/rbtree.h index 96688b1..2de7ef0 100644 --- a/src/rbtree.h +++ b/src/rbtree.h @@ -35,7 +35,7 @@ typedef struct { int rbtree_is_empty(rbtree *tree); -rbnode* rbtree_search(rbtree *tree, const void *key); +void* rbtree_search(rbtree *tree, const void *key); void rbtree_walk(rbtree *tree, void (*action)(rbnode *)); diff --git a/test/t_rbtree.c b/test/t_rbtree.c index d79c837..bbf7b5a 100644 --- a/test/t_rbtree.c +++ b/test/t_rbtree.c @@ -150,7 +150,7 @@ void test_search() { int index; - rbnode *n; + int *n; do index = rand() % NODES; @@ -162,8 +162,7 @@ void test_search() { n = rbtree_search(&tree, &keyref[index]); rb_assert(tree.root); - assert(n != NULL); - assert(n->key == &keyref[index]); + assert(n == &keyref[index]); index = MAX_VAL + 512;