{
size_t n = 0;
adns_rrtype qtf = type & adns__qtf_deref;
+ adns_queryflags permitaf = 0, hackaf = 0;
if (!(type & adns__qtf_bigaddr) || !(type & adns__qtf_manyaf))
qf = (qf & adns__qf_afmask) | adns_qf_ipv4_only;
+ else if (ads->iflags & adns_if_afmask) {
+ if (ads->iflags & adns_if_af_v4only) {
+ permitaf |= adns_qf_ipv4_only;
+ hackaf |= adns_qf_domapv4;
+ }
+ if (ads->iflags & adns_if_af_v6only)
+ permitaf |= adns_qf_ipv6_only;
+ if (qf & permitaf)
+ qf &= hackaf | permitaf | ~adns__qf_afmask;
+ }
+
if (qf & adns_qf_ipv4_only) rrty[n++] = adns_r_a | qtf;
if (qf & adns_qf_ipv6_only) rrty[n++] = adns_r_aaaa | qtf;
size_t addrsz = addr_rrsz(parent);
st= cans->status == adns_s_nodata ? adns_s_ok : cans->status;
- rrp->astatus= st;
if (st) goto done;
assert(addrsz == cans->rrsz);
done:
if (st) {
adns__free_interim(parent, rrp->addrs);
- rrp->naddrs= (st>0 && st<=adns_s_max_tempfail) ? -1 : cans->nrrs;
+ rrp->naddrs= (st>0 && st<=adns_s_max_tempfail) ? -1 : 0;
}
+ rrp->astatus= st;
if (parent->children.head) {
LIST_LINK_TAIL(ads->childw,parent);
} else {