Commit 077376be5ef773f4c274583548e3df051892f31f

Authored by Georg Hopp
1 parent 309ecbaf

don't replace tree nodes on insert but return the existing one. Note that this i…

…s different from the behaviour of tsearch which is the POSIX equivalent of this function, but in various situations it is much more handy.
Showing 1 changed file with 8 additions and 7 deletions
... ... @@ -44,13 +44,14 @@ TR_treeInsert(TR_Tree * this, const void * search, TR_TreeComp comp)
44 44 TR_TREE_FIND(node, search, found, comp);
45 45
46 46 if (found == 0) {
47   - // we found an element
48   - // as this is insert and not find this will overwrite an existing
49   - // value, but return the previous one so that it can be freed if
50   - // neccessary.
51   - void * data = node->data;
52   - node->data = (void *)search;
53   - return data;
  47 + // This differs from tsearch, which is the posix equivalent to
  48 + // this function in that it will not replace an existing value.
  49 + // If there is a value for the given key in the tree it will be
  50 + // retured. It is then up to the caller to handle the situation.
  51 + // This is used in my http header code to handle multiple value
  52 + // per header. There it is more useful to get the already existing
  53 + // tree entry and add the new data.
  54 + return node->data;
54 55 } else {
55 56 // not found
56 57 if (0 < found) {
... ...
Please register or login to post a comment