- struct timeval *tv, tvbuf;
- adns_query qu;
- void *qun_v;
- adns_answer *answer;
- int r, maxfd, invert;
- fd_set readfds, writefds, exceptfds;
-
- while ((arg= *++argv)) {
- if (arg[0] == '-' || arg[0] == '+') {
- if (arg[0] == '-' && arg[1] == '-') {
- if (!strncmp(arg,"--no-",5)) {
- invert= 1;
- oip= opt_findl(arg+5);
- } else {
- invert= 0;
- oip= opt_findl(arg+2);
- }
+ const char *arg2;
+ int invert;
+
+ if (arg[0] == '-' || arg[0] == '+') {
+ if (arg[0] == '-' && arg[1] == '-') {
+ if (!strncmp(arg,"--no-",5)) {
+ invert= 1;
+ oip= opt_findl(arg+5);
+ } else {
+ invert= 0;
+ oip= opt_findl(arg+2);
+ }
+ 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);
+ arg2= arg ? *++(*argv_p) : 0;
+ 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,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");
+ query_do(arg);
+ } else { /* arg[1] != '-', != '\0' */
+ invert= (arg[0] == '+');
+ ++arg;
+ while (*arg) {
+ oip= opt_finds(&arg);