abort(); /* fixme */
}
-void *adns__alloc_interim(adns_query qu, size_t sz) {
+static void *alloc_common(adns_query qu, size_t sz) {
allocnode *an;
if (!sz) return qu; /* Any old pointer will do */
assert(!qu->final_allocspace);
- sz= MEM_ROUND(sz);
an= malloc(MEM_ROUND(MEM_ROUND(sizeof(*an)) + sz));
if (!an) {
adns__query_fail(qu,adns_s_nolocalmem);
return 0;
}
- qu->interim_allocd += sz;
an->next= qu->allocations;
qu->allocations= an;
return (byte*)an + MEM_ROUND(sizeof(*an));
}
+void *adns__alloc_interim(adns_query qu, size_t sz) {
+ sz= MEM_ROUND(sz);
+ qu->interim_allocd += sz;
+ return alloc_common(qu,sz);
+}
+
+void *adns__alloc_mine(adns_query qu, size_t sz) {
+ return alloc_common(qu,MEM_ROUND(sz));
+}
+
void *adns__alloc_final(adns_query qu, size_t sz) {
/* When we're in the _final stage, we _subtract_ from interim_alloc'd
* each allocation, and use final_allocspace to point to the next free
#include "internal.h"
-static adns_status rp_inaddr(adns_state ads, adns_query qu, int serv,
+static adns_status rp_inaddr(adns_query qu, int serv,
const byte *dgram, int dglen, int cbyte, int max,
void *store_r) {
struct in_addr *dr= store_r;
return adns_s_ok;
}
-static adns_status rmf_null(adns_state ads, adns_query qu, void *data) { }
+static void rmf_null(adns_query qu, void *data) { }
-#define TYPE_SF(size,func,free) size, rp_#func, rmf_#free
-#define TYPE_SN(size,func) size, rp_#func, rmf_null
+#define TYPE_SF(size,func,free) size, rp_##func, rmf_##free
+#define TYPE_SN(size,func) size, rp_##func, rmf_null
#define TYPESZ_M(member) (sizeof(((adns_answer*)0)->rrs.member))
#define TYPE_MF(member,parse) TYPE_SF(TYPESZ_M(member),parse,member)
#define TYPE_MN(member,parse) TYPE_SN(TYPESZ_M(member),parse)
#endif
};
-const typeinfo adns__findtype(adns_rrtype type) {
- const typeinfo *begin, *end;
+const typeinfo *adns__findtype(adns_rrtype type) {
+ const typeinfo *begin, *end, *mid;
begin= typeinfos; end= typeinfos+(sizeof(typeinfos)/sizeof(typeinfo));