]> err.no Git - dpkg/commitdiff
handle -opt-value style options as well for files
authorWichert Akkerman <wakkerma@debian.org>
Sun, 1 Oct 2000 19:04:33 +0000 (19:04 +0000)
committerWichert Akkerman <wakkerma@debian.org>
Sun, 1 Oct 2000 19:04:33 +0000 (19:04 +0000)
lib/myopt.c

index a28e75387df133c4071c689cebd3b7d55c4c88c9..d625436c618a62780207df6999322cb783075add 100644 (file)
@@ -47,19 +47,29 @@ void myoptfile(const char* fn, const struct cmdinfo* cmdinfos) {
       while (isspace(*opt)) opt++;
     }
 
-    for (cip=cmdinfos; cip->olong || cip->oshort; cip++)
-      if (!strcmp(cip->olong,linebuf)) {
-        if (cip->takesvalue) {
-         if (!opt) ohshite(_("configuration error: %s needs a value"), linebuf);
-         if (cip->call) cip->call(cip,opt);
-         else *cip->sassignto= opt;
-       } else {
-         if (opt) ohshite(_("configuration error: %s does not take a value"), linebuf);
-         if (cip->call) cip->call(cip,0);
-         else *cip->iassignto= cip->arg;
-       }
+    for (cip=cmdinfos; cip->olong || cip->oshort; cip++) {
+      int l;
+      if (!cip->olong) continue;
+      if (!strcmp(cip->olong,linebuf)) break;
+      l=strlen(cip->olong);
+      if ((cip->takesvalue==2) && (linebuf[l]=='-') &&
+         !opt && !strncmp(linebuf,cip->olong,l)) {
+       opt=linebuf+l+1;
+       break;
       }
+    }
+
     if (!cip->olong) ohshite(_("configuration error: unknown option %s"), linebuf);
+
+    if (cip->takesvalue) {
+      if (!opt) ohshite(_("configuration error: %s needs a value"), linebuf);
+      if (cip->call) cip->call(cip,opt);
+      else *cip->sassignto= opt;
+    } else {
+      if (opt) ohshite(_("configuration error: %s does not take a value"), linebuf);
+      if (cip->call) cip->call(cip,0);
+      else *cip->iassignto= cip->arg;
+    }
   }
   if (ferror(file)) ohshite(_("read error in configuration file `%.255s'"), fn);
   if (fclose(file)) ohshite(_("error closing configuration file `%.255s'"), fn);