* Lookup the predecessor in the main tree.
*/
node = NULL;
- result = dns_qp_lookup(search->qpdb->tree, predecessor, NULL, NULL,
- NULL, (void **)&node, NULL);
+ result = dns_qp_getname(search->qpdb->tree, predecessor, (void **)&node,
+ NULL);
if (result != ISC_R_SUCCESS) {
- return (ISC_R_NOTFOUND);
+ return (result);
}
dns_name_copy(&node->name, fname);
isc_rwlocktype_t tlocktype = isc_rwlocktype_none;
TREE_RDLOCK(&qpdb->tree_lock, &tlocktype);
- result = dns_qp_lookup(qpdb->tree, name, NULL, NULL, NULL,
- (void **)&node, NULL);
+ result = dns_qp_getname(qpdb->tree, name, (void **)&node, NULL);
if (result != ISC_R_SUCCESS) {
if (!create) {
- if (result == DNS_R_PARTIALMATCH) {
- result = ISC_R_NOTFOUND;
- }
goto unlock;
}
/*
* Try to upgrade the lock and if that fails unlock then relock.
*/
TREE_FORCEUPGRADE(&qpdb->tree_lock, &tlocktype);
- result = dns_qp_lookup(qpdb->tree, name, NULL, NULL, NULL,
- (void **)&node, NULL);
+ result = dns_qp_getname(qpdb->tree, name, (void **)&node, NULL);
if (result != ISC_R_SUCCESS) {
node = new_qpcnode(qpdb, name);
result = dns_qp_insert(qpdb->tree, node, 0);
dns_qpmulti_query(zt->multi, &qpr);
- result = dns_qp_lookup(&qpr, name, NULL, NULL, &chain, &pval, NULL);
- if (exactopts == DNS_ZTFIND_EXACT && result == DNS_R_PARTIALMATCH) {
- result = ISC_R_NOTFOUND;
- } else if (exactopts == DNS_ZTFIND_NOEXACT && result == ISC_R_SUCCESS) {
- /* get pval from the previous chain link */
- int len = dns_qpchain_length(&chain);
- if (len >= 2) {
- dns_qpchain_node(&chain, len - 2, NULL, &pval, NULL);
- result = DNS_R_PARTIALMATCH;
- } else {
- result = ISC_R_NOTFOUND;
+ if (exactopts == DNS_ZTFIND_EXACT) {
+ result = dns_qp_getname(&qpr, name, &pval, NULL);
+ } else {
+ result = dns_qp_lookup(&qpr, name, NULL, NULL, &chain, &pval,
+ NULL);
+ if (exactopts == DNS_ZTFIND_NOEXACT && result == ISC_R_SUCCESS)
+ {
+ /* get pval from the previous chain link */
+ int len = dns_qpchain_length(&chain);
+ if (len >= 2) {
+ dns_qpchain_node(&chain, len - 2, NULL, &pval,
+ NULL);
+ result = DNS_R_PARTIALMATCH;
+ } else {
+ result = ISC_R_NOTFOUND;
+ }
}
}
dns_qpread_destroy(zt->multi, &qpr);