Skip to content
  • David Lawrence's avatar
    Changes from Bob, best described in his own barely-edited words: · 5f50687f
    David Lawrence authored
      I added support for the full search algorithm to the RBT database
      code.  The database has some special needs in searching, in particular
      certain nodes need to be examined before the DOWN pointer is followed.
    
      I solved this problem by adding a 'callback' bit to the node structure.
      When findnode is called, the caller can supply a callback.  Before we go
      DOWN at a node, we call the callback if the callback bit is set at the
      node.  If the callback returns DNS_R_CONTINUE, we proceed.  Otherwise, we
      will stop right there and return what the caller said to return.  I
      added an 'empty_data_ok' flag to findnode as well, so that nodes with
      empty data can be made candidates for partial match status.
    
      I also wanted to make dns_rbtnodechain_t public, so that a chain could
      be allocated on the stack by the caller.  I added two routines,
      dns_rbtnodechain_init() and dns_rbtnodechain_reset() to work with them.
      The latter routine frees any dynamically allocated memory associated with
      the chain.  The chain structure now contains the memory context.  I also
      moved get_ancestor_mem() and put_ancestor_mem() up in the file, so that
      inlining could be more effective.
    
      In the nits department, you wrote
    
                      *node = result == DNS_R_SUCCESS ? current : NULL;
    
      In the future, please write this instead (the patch has this change in it):
    
                      if (result == DNS_R_SUCCESS)
                              *node = current;
                      else
                              *node = NULL;
    5f50687f