chiark / gitweb /
adnshost: adh-opts.c: Whitespace adjustments to option table
[adns.git] / client / adh-main.c
index 7065d58ecd53bd2afd82a7497d52cb2ad95296a4..0d1d57e3d10e5157d4f8cbab5b4a6304b3bd5463 100644 (file)
@@ -4,16 +4,16 @@
  *   main program and useful subroutines
  */
 /*
- *  This file is
- *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
- *
- *  It is part of adns, which is
- *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
- *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
+ *  This file is part of adns, which is
+ *    Copyright (C) 1997-2000,2003,2006,2014-2016,2020  Ian Jackson
+ *    Copyright (C) 2014  Mark Wooding
+ *    Copyright (C) 1999-2000,2003,2006  Tony Finch
+ *    Copyright (C) 1991 Massachusetts Institute of Technology
+ *  (See the file INSTALL for full details.)
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
+ *  the Free Software Foundation; either version 3, or (at your option)
  *  any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -22,8 +22,7 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software Foundation,
- *  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
+ *  along with this program; if not, write to the Free Software Foundation.
  */
 
 #include "adnshost.h"
@@ -100,6 +99,7 @@ void of_type(const struct optioninfo *oi, const char *arg, const char *arg2) {
     
     /* raw versions */
     { adns_r_a,        "a"    },
+    { adns_r_aaaa,     "aaaa" },
     { adns_r_ns_raw,   "ns-"  },
     { adns_r_soa_raw,  "soa-" },
     { adns_r_ptr_raw,  "ptr-" },
@@ -111,6 +111,14 @@ void of_type(const struct optioninfo *oi, const char *arg, const char *arg2) {
   };
 
   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);
@@ -121,7 +129,7 @@ void of_type(const struct optioninfo *oi, const char *arg, const char *arg2) {
 
 static void process_optarg(const char *arg,
                           const char *const **argv_p,
-                          const char *value) {
+                          char *value) {
   const struct optioninfo *oip;
   const char *arg2;
   int invert;
@@ -140,9 +148,17 @@ static void process_optarg(const char *arg,
        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);
-       arg2= arg ? *++(*argv_p) : 0;
+       if (argv_p) {
+         arg= *++(*argv_p);
+         arg2= arg ? *++(*argv_p) : 0;
+       } else if (value) {
+         arg= value;
+         char *space= strchr(value,' ');
+         if (space) *space++= 0;
+         arg2= space;
+       } else {
+         arg= 0;
+       }
        if (!arg || !arg2)
          usageerr("option --%s requires two more arguments", oip->lopt);
       } else {
@@ -198,7 +214,7 @@ static void read_stdin(void) {
       if (r == 0) {
        if (used) {
          /* fake up final newline */
-         buf[used++]= '\n';
+         buf[used]= '\n';
          r= 1;
        } else {
          ov_pipe= 0;