X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=client%2Fadh-main.c;h=0d1d57e3d10e5157d4f8cbab5b4a6304b3bd5463;hb=fc440c64836370db9d8cb1a25f09c9df0786f865;hp=0fe6af0c5b8f1f356df84439703c06f9b08d92f2;hpb=7f8bbe29436e29cc2683955d642f79a10d62f67d;p=adns.git diff --git a/client/adh-main.c b/client/adh-main.c index 0fe6af0..0d1d57e 100644 --- a/client/adh-main.c +++ b/client/adh-main.c @@ -5,7 +5,8 @@ */ /* * This file is part of adns, which is - * Copyright (C) 1997-2000,2003,2006 Ian Jackson + * 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.) @@ -21,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" @@ -129,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; @@ -148,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 { @@ -206,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;