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>
mc->doneyet= 0;
mc->fdom= fdomlist[qi];
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");
r= adns_submit(ads,domain,types[ti],qflags,mc,&mc->qu);
if (r == ENOSYS) {
fprintf(stdout," not implemented\n");
typedef enum {
adns_rrt_typemask= 0x0ffff,
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 */
adns__qtf_deref= 0x10000,/* dereference domains; perhaps get extra data */
adns__qtf_mail822= 0x20000,/* return mailboxes in RFC822 rcpt field fmt */
adns_queryflags flags,
void *context,
adns_query *query_r) {
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);
}
return adns_submit_reverse_any(ads,addr,"in-addr.arpa",
type,flags,context,query_r);
}
#define TYPESZ_M(member) (sizeof(*((adns_answer*)0)->rrs.member))
#define DEEP_TYPE(code,rrt,fmt,memb,parser,comparer,/*printer*/...) \
#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*/...) \
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__) }
GLUE(cs_, CAR(__VA_ARGS__)),pa_##parser,di_##comparer, \
adns__ckl_hostname, CDR(__VA_ARGS__) }
const typeinfo *begin, *end, *mid;
if (type & adns_r_unknown) return &typeinfo_unknown;
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));
begin= typeinfos; end= typeinfos+(sizeof(typeinfos)/sizeof(typeinfo));