chiark / gitweb /
Updated dist version.
[adns.git] / client / adh-main.c
index b933bfa4f6537d8ce40bce69ae5f2d38eeae2131..3fa1adb7935730c38d126a80b82bf7bc798cc066 100644 (file)
@@ -47,12 +47,6 @@ void outerr(void) {
   sysfail("write to stdout",errno);
 }
 
-static void domain_do(const char *domain) {
-  if (ov_pipe && !ads) usageerr("-f/--pipe not consistent with domains on command line");
-  ensure_adns_init();
-  query_do(domain);
-}
-
 void *xmalloc(size_t sz) {
   void *p;
 
@@ -68,7 +62,7 @@ char *xstrsave(const char *str) {
   return p;
 }
 
-void of_type(const struct optioninfo *oi, const char *arg) {
+void of_type(const struct optioninfo *oi, const char *arg, const char *arg2) {
   static const struct typename {
     adns_rrtype type;
     const char *desc;
@@ -112,6 +106,7 @@ static void process_optarg(const char *arg,
                           const char *const **argv_p,
                           const char *value) {
   const struct optioninfo *oip;
+  const char *arg2;
   int invert;
 
   if (arg[0] == '-' || arg[0] == '+') {
@@ -126,15 +121,23 @@ static void process_optarg(const char *arg,
       if (oip->type == ot_funcarg) {
        arg= argv_p ? *++(*argv_p) : value;
        if (!arg) usageerr("option --%s requires a value argument",oip->lopt);
+       arg2= 0;
+      } else if (oip->type == ot_funcarg2) {
+       assert(argv_p);
+       arg= *++(*argv_p);
+       if (arg) arg2= *++(*argv_p);
+       if (!arg || !arg2)
+         usageerr("option --%s requires two more arguments", oip->lopt);
       } else {
        if (value) usageerr("option --%s does not take a value",oip->lopt);
        arg= 0;
+       arg2= 0;
       }
-      opt_do(oip,arg,invert);
+      opt_do(oip,invert,arg,arg2);
     } else if (arg[0] == '-' && arg[1] == 0) {
       arg= argv_p ? *++(*argv_p) : value;
       if (!arg) usageerr("option `-' must be followed by a domain");
-      domain_do(arg);
+      query_do(arg);
     } else { /* arg[1] != '-', != '\0' */
       invert= (arg[0] == '+');
       ++arg;
@@ -147,16 +150,16 @@ static void process_optarg(const char *arg,
          } else {
            if (value) usageerr("two values for option -%s given !",oip->sopt);
          }
-         opt_do(oip,arg,invert);
+         opt_do(oip,invert,arg,0);
          arg= "";
        } else {
          if (value) usageerr("option -%s does not take a value",oip->sopt);
-         opt_do(oip,0,invert);
+         opt_do(oip,invert,0,0);
        }
       }
     }
   } else { /* arg[0] != '-' */
-    domain_do(arg);
+    query_do(arg);
   }
 }