]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
what's a push without a pop
authorMiek Gieben <miekg@NLnetLabs.nl>
Tue, 8 Mar 2005 11:23:09 +0000 (11:23 +0000)
committerMiek Gieben <miekg@NLnetLabs.nl>
Tue, 8 Mar 2005 11:23:09 +0000 (11:23 +0000)
ldns/resolver.h
resolver.c

index f0a24c80377e67f4d7cd46383ac00c89890d3efe..24e1f70f931b453de701353c6652eb17975c4ba3 100644 (file)
@@ -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 *);
index dfc578298bc8b20cdec222f757fcb93bf58bdc32..f186d9e30672c4793983673ed359e4407f1e99e0 100644 (file)
@@ -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)
 {