chiark / gitweb /
src/: Pass the wanted query's type code to adns__internal_submit.
[adns.git] / src / types.c
index cc9f31279c75e08ddb8381acf7f367134504cd4c..90413a0bd4a2d98849a0094b97d7e16ae6a439b8 100644 (file)
@@ -517,6 +517,8 @@ static adns_status pap_hostaddr(const parseinfo *pai, int *cbyte_io,
   if (!(pai->qu->flags & adns_qf_cname_loose)) nflags |= adns_qf_cname_forbid;
   
   st= adns__internal_submit(pai->ads, &nqu, adns__findtype(adns_r_addr),
+                           ((adns_r_addr & adns_rrt_reprmask) |
+                            (pai->qu->answer->type & ~adns_rrt_reprmask)),
                            &pai->qu->vb, id, nflags, pai->now, &ctx);
   if (st) return st;
 
@@ -791,8 +793,8 @@ static adns_status pa_ptr(const parseinfo *pai, int dmstart,
   memset(&ctx.pinfo,0,sizeof(ctx.pinfo));
   memset(&ctx.tinfo,0,sizeof(ctx.tinfo));
   st= adns__internal_submit(pai->ads, &nqu, adns__findtype(adns_r_a),
-                           &pai->qu->vb, id,
-                           adns_qf_quoteok_query, pai->now, &ctx);
+                           adns_r_a, &pai->qu->vb, id, adns_qf_quoteok_query,
+                           pai->now, &ctx);
   if (st) return st;
 
   nqu->parent= pai->qu;
@@ -1222,11 +1224,11 @@ static void mf_flat(adns_query qu, void *data) { }
 #define TYPESZ_M(member)           (sizeof(*((adns_answer*)0)->rrs.member))
 
 #define DEEP_TYPE(code,rrt,fmt,memb,parser,comparer,/*printer*/...)    \
- { adns_r_##code, rrt,fmt,TYPESZ_M(memb), mf_##memb,                   \
+ { adns_r_##code&adns_rrt_reprmask, rrt,fmt,TYPESZ_M(memb), mf_##memb, \
      GLUE(cs_, CAR(__VA_ARGS__)),pa_##parser,di_##comparer,            \
      adns__ckl_hostname, CDR(__VA_ARGS__) }
 #define FLAT_TYPE(code,rrt,fmt,memb,parser,comparer,/*printer*/...)    \
- { adns_r_##code, rrt,fmt,TYPESZ_M(memb), mf_flat,                     \
+ { adns_r_##code&adns_rrt_reprmask, rrt,fmt,TYPESZ_M(memb), mf_flat,   \
      GLUE(cs_, CAR(__VA_ARGS__)),pa_##parser,di_##comparer,            \
      adns__ckl_hostname, CDR(__VA_ARGS__) }
 
@@ -1267,6 +1269,7 @@ const typeinfo *adns__findtype(adns_rrtype type) {
   const typeinfo *begin, *end, *mid;
 
   if (type & adns_r_unknown) return &typeinfo_unknown;
+  type &= adns_rrt_reprmask;
 
   begin= typeinfos;  end= typeinfos+(sizeof(typeinfos)/sizeof(typeinfo));