+void *adns__alloc_interim(adns_query qu, size_t sz);
+/* Allocates some memory, and records which query it came from
+ * and how much there was.
+ *
+ * If an error occurs in the query, all its memory is simply freed.
+ *
+ * If the query succeeds, one large buffer will be made which is
+ * big enough for all these allocations, and then adns__alloc_final
+ * will get memory from this buffer.
+ *
+ * _alloc_interim can fail, in which case it will fail the query too,
+ * so nothing more need be done with it.
+ */
+
+void *adns__alloc_final(adns_query qu, size_t sz);
+/* Cannot fail.
+ */
+
+void adns__makefinal_block(adns_query qu, void **blpp, size_t sz);
+void adns__makefinal_str(adns_query qu, char **strp);
+
+void adns__reset_cnameonly(adns_state ads, adns_query qu);
+/* Resets all of the memory management stuff etc. to
+ * take account of only the CNAME. Used when we find an error somewhere
+ * and want to just report the error (with perhaps CNAME info), and also
+ * when we're halfway through RRs in a datagram and discover that we
+ * need to retry the query.
+ */
+
+void adns__query_done(adns_state ads, adns_query qu);
+void adns__query_fail(adns_state ads, adns_query qu, adns_status stat);
+