chiark / gitweb /
Add a type hook for reporting the output record size.
[adns] / src / query.c
index 46d69699e49750b806bc4983b7ef4523a9963fce..30108f2a6b7a24e2e3f8196ce8dbb0f4d72f83c7 100644 (file)
@@ -83,7 +83,7 @@ static adns_query query_alloc(adns_state ads,
   qu->answer->expires= -1;
   qu->answer->nrrs= 0;
   qu->answer->rrs.untyped= 0;
-  qu->answer->rrsz= typei->rrsz;
+  qu->answer->rrsz= typei->getrrsz ? typei->getrrsz(type) : typei->rrsz;
 
   return qu;
 }
@@ -390,11 +390,11 @@ void *adns__alloc_preserved(adns_query qu, size_t sz) {
   return rv;
 }
 
-static allocnode *alloc_info(void *p, size_t *sz_r)
+static allocnode *alloc_info(adns_query qu, void *p, size_t *sz_r)
 {
   allocnode *an;
 
-  if (!p) { *sz_r = 0; return 0; }
+  if (!p || p == qu) { *sz_r = 0; return 0; }
   an = (allocnode *)((byte *)p - MEM_ROUND(sizeof(allocnode)));
   *sz_r = MEM_ROUND(an->sz);
   return an;
@@ -402,7 +402,7 @@ static allocnode *alloc_info(void *p, size_t *sz_r)
 
 void adns__free_interim(adns_query qu, void *p) {
   size_t sz;
-  allocnode *an = alloc_info(p, &sz);
+  allocnode *an = alloc_info(qu, p, &sz);
 
   if (!an) return;
   assert(!qu->final_allocspace);
@@ -417,7 +417,7 @@ void *adns__alloc_mine(adns_query qu, size_t sz) {
 
 void adns__transfer_interim(adns_query from, adns_query to, void *block) {
   size_t sz;
-  allocnode *an = alloc_info(block, &sz);
+  allocnode *an = alloc_info(from, block, &sz);
 
   if (!an) return;