# HG changeset patch # User John Tsiombikas # Date 1414918827 -7200 # Node ID 1b77b72688fe8fcd1b9b18afc74730c023b02c8f # Parent 1b8a3a6088b6e0c12ca7f1c2a8ab4d22d57ad4c4 - fixed bug in rb_init making it ignore comparison functions other than the builtin - fixed rb_find and rb_findi return type, which should be struct rbnode*, not void* diff -r 1b8a3a6088b6 -r 1b77b72688fe src/rbtree.c --- a/src/rbtree.c Sun Nov 02 10:56:08 2014 +0200 +++ b/src/rbtree.c Sun Nov 02 11:00:27 2014 +0200 @@ -62,12 +62,14 @@ { memset(rb, 0, sizeof *rb); - if(cmp_func == RB_KEY_INT) { + if(!cmp_func) { + rb->cmp = cmpaddr; + } else if(cmp_func == RB_KEY_INT) { rb->cmp = cmpint; } else if(cmp_func == RB_KEY_STRING) { rb->cmp = (rb_cmp_func_t)strcmp; } else { - rb->cmp = cmpaddr; + rb->cmp = cmp_func; } rb->alloc = malloc; @@ -154,7 +156,7 @@ } -void *rb_find(struct rbtree *rb, void *key) +struct rbnode *rb_find(struct rbtree *rb, void *key) { struct rbnode *node = rb->root; @@ -168,7 +170,7 @@ return 0; } -void *rb_findi(struct rbtree *rb, int key) +struct rbnode *rb_findi(struct rbtree *rb, int key) { return rb_find(rb, INT2PTR(key)); } diff -r 1b8a3a6088b6 -r 1b77b72688fe src/rbtree.h --- a/src/rbtree.h Sun Nov 02 10:56:08 2014 +0200 +++ b/src/rbtree.h Sun Nov 02 11:00:27 2014 +0200 @@ -56,8 +56,8 @@ int rb_delete(struct rbtree *rb, void *key); int rb_deletei(struct rbtree *rb, int key); -void *rb_find(struct rbtree *rb, void *key); -void *rb_findi(struct rbtree *rb, int key); +struct rbnode *rb_find(struct rbtree *rb, void *key); +struct rbnode *rb_findi(struct rbtree *rb, int key); void rb_foreach(struct rbtree *rb, void (*func)(struct rbnode*, void*), void *cls);