+void of_type(const struct optioninfo *oi, const char *arg, const char *arg2) {
+ static const struct typename {
+ adns_rrtype type;
+ const char *desc;
+ } typenames[]= {
+ /* enhanced versions */
+ { adns_r_ns, "ns" },
+ { adns_r_soa, "soa" },
+ { adns_r_ptr, "ptr" },
+ { adns_r_mx, "mx" },
+ { adns_r_rp, "rp" },
+ { adns_r_srv, "srv" },
+ { adns_r_addr, "addr" },
+
+ /* types with only one version */
+ { adns_r_cname, "cname" },
+ { adns_r_hinfo, "hinfo" },
+ { adns_r_txt, "txt" },
+
+ /* raw versions */
+ { adns_r_a, "a" },
+ { adns_r_ns_raw, "ns-" },
+ { adns_r_soa_raw, "soa-" },
+ { adns_r_ptr_raw, "ptr-" },
+ { adns_r_mx_raw, "mx-" },
+ { adns_r_rp_raw, "rp-" },
+ { adns_r_srv_raw, "srv-" },
+
+ { adns_r_none, 0 }
+ };
+
+ const struct typename *tnp;
+ unsigned long unknowntype;
+ char *ep;
+
+ if (strlen(arg) > 4 && !memcmp(arg,"type",4) &&
+ (unknowntype= strtoul(arg+4, &ep, 10), !*ep) && unknowntype < 65536) {
+ ov_type= unknowntype | adns_r_unknown;
+ return;
+ }
+
+ for (tnp=typenames;
+ tnp->type && strcmp(arg,tnp->desc);
+ tnp++);
+ if (!tnp->type) usageerr("unknown RR type %s",arg);
+ ov_type= tnp->type;
+}
+
+static void process_optarg(const char *arg,
+ const char *const **argv_p,
+ const char *value) {