summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuentin Carbonneaux2015-03-09 11:47:54 -0400
committerQuentin Carbonneaux2015-03-09 11:47:54 -0400
commitbaffac8b22758f2ea150eedfc10ad28f73e99c26 (patch)
treeef17d1de3c6cdd1198bb172a6bec5c075a016c33
parent596f0b8b5a9f61aec26b2729e88bdbe8a3d58c09 (diff)
smarter option parsing, thanks to k0ga
-rw-r--r--myacc.c34
1 files changed, 18 insertions, 16 deletions
diff --git a/myacc.c b/myacc.c
index 7fe88fc..990015f 100644
--- a/myacc.c
+++ b/myacc.c
@@ -1214,27 +1214,29 @@ void
init(int ac, char *av[])
{
int c, vf, df;
- char *pref, buf[100];
+ char *pref, buf[100], *opt;
(void) ac;
pref = "y";
vf = df = 0;
- for (av++; av[0] && av[0][0]=='-' && (c=av[0][1]); av++)
- switch (c) {
- case 'v':
- vf = 1;
- break;
- case 'd':
- df = 1;
- break;
- case 'b':
- if ((pref = *++av))
+ for (av++; av[0] && av[0][0]=='-'; av++)
+ for (opt = &av[0][1]; (c = *opt); opt++)
+ switch (c) {
+ case 'v':
+ vf = 1;
break;
- default:
- usage:
- fputs("usage: myacc [-vd] [-b file_prefix] grammar\n", stderr);
- exit(1);
- }
+ case 'd':
+ df = 1;
+ break;
+ case 'b':
+ if ((pref = *++av))
+ break;
+ default:
+ usage:
+ fputs("usage: myacc [-vd] [-b file_prefix] grammar\n", stderr);
+ exit(1);
+ }
+
if (!(srca = *av))
goto usage;
fin = fopen(srca, "r");