From: Miek Gieben Date: Tue, 8 Mar 2005 11:23:09 +0000 (+0000) Subject: what's a push without a pop X-Git-Tag: release-0.50~291 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=17c6071b7355d59e29647cdedd2fa2885d6b729a;p=thirdparty%2Fldns.git what's a push without a pop --- diff --git a/ldns/resolver.h b/ldns/resolver.h index f0a24c80..24e1f70f 100644 --- a/ldns/resolver.h +++ b/ldns/resolver.h @@ -101,11 +101,13 @@ void ldns_resolver_set_port(ldns_resolver *, uint16_t); void ldns_resolver_set_recursive(ldns_resolver *, bool); void ldns_resolver_set_debug(ldns_resolver *, bool); void ldns_resolver_incr_nameserver_count(ldns_resolver *); +void ldns_resolver_dec_nameserver_count(ldns_resolver *); void ldns_resolver_set_nameserver_count(ldns_resolver *, size_t); void ldns_resolver_set_domain(ldns_resolver *, ldns_rdf *); void ldns_resolver_set_timeout(ldns_resolver *r, struct timeval timeout); void ldns_resolver_push_searchlist(ldns_resolver *, ldns_rdf *); +ldns_rdf * ldns_resolver_pop_nameserver(ldns_resolver *); ldns_status ldns_resolver_push_nameserver(ldns_resolver *, ldns_rdf *); ldns_status ldns_resolver_push_nameserver_rr(ldns_resolver *, ldns_rr *); ldns_status ldns_resolver_push_nameserver_rr_list(ldns_resolver *, ldns_rr_list *); diff --git a/resolver.c b/resolver.c index dfc57829..f186d9e3 100644 --- a/resolver.c +++ b/resolver.c @@ -123,6 +123,33 @@ ldns_resolver_set_port(ldns_resolver *r, uint16_t p) r->_port = p; } +/** + * pop the last nameserver from the resolver. + * \param[in] r the resolver + * \return the popped address or NULL if empty + */ +ldns_rdf * +ldns_resolver_pop_nameserver(ldns_resolver *r) +{ + ldns_rdf **nameservers; + ldns_rdf *pop; + + if (ldns_resolver_nameserver_count(r) == 0) { + return NULL; + } + + nameservers = ldns_resolver_nameservers(r); + + pop = nameservers[ldns_resolver_nameserver_count(r)]; + + /* delete the room of the last one */ + nameservers = XREALLOC(nameservers, ldns_rdf *, + (ldns_resolver_nameserver_count(r) - 1)); + + ldns_resolver_dec_nameserver_count(r); + return pop; +} + /** * push a new nameserver to the resolver. It must be an IP * address v4 or v6. @@ -261,6 +288,19 @@ ldns_resolver_incr_nameserver_count(ldns_resolver *r) ldns_resolver_set_nameserver_count(r, ++c); } +void +ldns_resolver_dec_nameserver_count(ldns_resolver *r) +{ + size_t c; + + c = ldns_resolver_nameserver_count(r); + if (c == 0) { + return; + } else { + ldns_resolver_set_nameserver_count(r, --c); + } +} + void ldns_resolver_set_domain(ldns_resolver *r, ldns_rdf *d) {