From 480ad611fe68efe049063ba4a99c028f11b8a0ea Mon Sep 17 00:00:00 2001 From: Bob Halley Date: Mon, 10 May 1999 21:21:55 +0000 Subject: [PATCH] Allow a dbiterator to be restarted (with dns_dbiterator_first()) so long as an error has not occurred. Have dns_dbiterator_first() return DNS_R_NOMORE if the tree is empty. --- lib/dns/rbtdb.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/lib/dns/rbtdb.c b/lib/dns/rbtdb.c index 1fa3877776..dbfd3de80b 100644 --- a/lib/dns/rbtdb.c +++ b/lib/dns/rbtdb.c @@ -3077,7 +3077,8 @@ dbiterator_first(dns_dbiterator_t *iterator) { dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)iterator->db; dns_name_t *name, *origin; - if (rbtdbiter->result != DNS_R_SUCCESS) + if (rbtdbiter->result != DNS_R_SUCCESS && + rbtdbiter->result != DNS_R_NOMORE) return (rbtdbiter->result); unpause(rbtdbiter); @@ -3094,18 +3095,22 @@ dbiterator_first(dns_dbiterator_t *iterator) { origin); if (result != DNS_R_NEWORIGIN) { INSIST(result != DNS_R_SUCCESS); - rbtdbiter->result = result; + if (result == DNS_R_NOTFOUND) { + /* + * The tree is empty. + */ + result = DNS_R_NOMORE; + } rbtdbiter->node = NULL; } else { result = dns_rbtnodechain_current(&rbtdbiter->chain, NULL, NULL, &rbtdbiter->node); if (result == DNS_R_SUCCESS) rbtdbiter->new_origin = ISC_TRUE; - else { - rbtdbiter->result = result; + else rbtdbiter->node = NULL; - } } + rbtdbiter->result = result; return (result); }