chiark / gitweb /
src/: Carve out a `representation' subfield of adns_rrtype.
authorMark Wooding <mdw@distorted.org.uk>
Sat, 31 May 2014 23:48:59 +0000 (00:48 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 12 Oct 2014 19:39:46 +0000 (20:39 +0100)
Only the bits covered by adns_rrt_reprmask are used in translating a
query type into a typeinfo structure.

Arrange for adnstest to only print out the representation bits of the
type; otherwise lots of the regression test files need to change for no
especially good reason.

Signed-off-by: Mark Wooding <mdw@distorted.org.uk>
client/adnstest.c
src/adns.h
src/query.c
src/types.c

index 550cf275642f7f29683a9c278bf90e22b49bb274..20f7c31219db77830d3c7e69ec37795a08a3526f 100644 (file)
@@ -251,7 +251,8 @@ int main(int argc, char *const *argv) {
       mc->doneyet= 0;
       mc->fdom= fdomlist[qi];
 
-      fprintf(stdout,"%s flags %d type %d",domain,qflags,types[ti]);
+      fprintf(stdout,"%s flags %d type %d",
+             domain,qflags,types[ti]&adns_rrt_reprmask);
       r= adns_submit(ads,domain,types[ti],qflags,mc,&mc->qu);
       if (r == ENOSYS) {
        fprintf(stdout," not implemented\n");
index a9039346324cbe865f43473f6460ba0bb225c907..578545c80024f5bb0442227b69481874d95c9fd3 100644 (file)
@@ -106,6 +106,7 @@ typedef enum { /* In general, or together the desired flags: */
 
 typedef enum {
  adns_rrt_typemask=  0x0ffff,
+ adns_rrt_reprmask= 0xffffff,
  adns__qtf_deref=    0x10000,/* dereference domains; perhaps get extra data */
  adns__qtf_mail822=  0x20000,/* return mailboxes in RFC822 rcpt field fmt   */
 
index a3ce68d8051aa7c821af959c0cbf9e19e53ad378..26a4df03eaddc770fdf5910d3f8bf6b816488761 100644 (file)
@@ -364,7 +364,9 @@ int adns_submit_reverse(adns_state ads,
                        adns_queryflags flags,
                        void *context,
                        adns_query *query_r) {
-  if (type != adns_r_ptr && type != adns_r_ptr_raw) return EINVAL;
+  if (((type^adns_r_ptr) & adns_rrt_reprmask) &&
+      ((type^adns_r_ptr_raw) & adns_rrt_reprmask))
+    return EINVAL;
   return adns_submit_reverse_any(ads,addr,"in-addr.arpa",
                                 type,flags,context,query_r);
 }
index cc9f31279c75e08ddb8381acf7f367134504cd4c..83a57927ad9f74f019240ec564a5c5490561af68 100644 (file)
@@ -1222,11 +1222,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 +1267,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));