- byte *newbuf;
-
- newbuf= realloc(qu->ans.buf,qu->ans.used);
- if (newbuf) qu->ans.buf= newbuf;
- ans= (adns_answer*)qu->ans.buf;
- ans->status= stat;
- ans->cname= qu->cnameoff<0 ? 0 : qu->ans.buf + qu->cnameoff;
- ans->rrs.str= qu->rrsoff<0 ? 0 : (char **)(qu->ans.buf + qu->rrsoff);
+ allocnode *an, *ann;
+
+ qu->answer= ans= realloc(qu->answer,
+ MEM_ROUND(MEM_ROUND(sizeof(*ans)) +
+ qu->interim_allocd));
+ qu->final_used= MEM_ROUND(sizeof(*ans));
+
+ adns__makefinal_str(qu,&ans->cname);
+ if (ans->nrrs) {
+ adns__makefinal_block(qu,&ans->rrs.untyped,ans->rrsz*ans->nrrs);
+ for (i=0; i<ans->nrrs; i++)
+ qu->typei->makefinal(ads,qu,ans->rrs.bytes+ans->rrsz*i);
+ }
+
+ for (an= qu->allocations; an; an= ann) { ann= an->next; free(an); }
+
+ adns__vbuf_free(&qu->vb);
+