]> rtime.felk.cvut.cz Git - ulut.git/commitdiff
Fix non-typesafe/void * variant of GAVL to support non-unique keys.
authorPavel Pisa <pisa@cmp.felk.cvut.cz>
Thu, 27 Dec 2012 11:15:24 +0000 (12:15 +0100)
committerPavel Pisa <pisa@cmp.felk.cvut.cz>
Thu, 27 Dec 2012 11:15:24 +0000 (12:15 +0100)
The original void * version of the gavl_insert() does
not work correctly when insert mode with non-unique keys
(GAVL_FAFTER) is requested.

Bug reported by Rostislav Lisovy.

Signed-off-by: Pavel Pisa <pisa@cmp.felk.cvut.cz>
ulut/ul_gavl.c
ulut/ul_gavlchk.c

index 20d4797b4540e03c4dbdd54d229df633706ea4b5..94cb319d5e322e5970966f7860d78612036b1bc6 100644 (file)
@@ -121,7 +121,7 @@ gavl_search_node(const gavl_root_t *root, const void *key,
       break;
     }
   }
-  if(mode&GAVL_FAFTER){
+  if((mode&GAVL_FAFTER)&&!(mode&GAVL_FCMP)){
     if(cmp<=0)
       if(p) p=gavl_next_node(p);
     *nodep=p;
index bb67226655b14c46a067e8d3759aee29657ae1fc..66deb3119b04588e10b08dd44f4eb06ca9dc1d43 100644 (file)
@@ -575,11 +575,12 @@ int main(int argc, char *argv[])
     c=0;
     scanf("%c",&c);
     switch(c){
+      case 'A':
       case 'a':
         if (scanf("%d",&val)==1){
          item=malloc(sizeof(test_item1_t));
          item->val=val;
-         ret=gavl_insert(&test_gavl1,item,0);
+         ret=gavl_insert(&test_gavl1,item,c == 'A'? GAVL_FAFTER: 0);
          printf("gavl_insert of val %d returned %d\n\n",val,ret);
          gavl_print_tree1(&test_gavl1, test_gavl1.root_node, 0, NULL, 0);
         }