-
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