diff options
| author | Quentin Carbonneaux | 2015-03-09 11:47:54 -0400 |
|---|---|---|
| committer | Quentin Carbonneaux | 2015-03-09 11:47:54 -0400 |
| commit | baffac8b22758f2ea150eedfc10ad28f73e99c26 (patch) | |
| tree | ef17d1de3c6cdd1198bb172a6bec5c075a016c33 | |
| parent | 596f0b8b5a9f61aec26b2729e88bdbe8a3d58c09 (diff) | |
smarter option parsing, thanks to k0ga
| -rw-r--r-- | myacc.c | 34 |
1 files changed, 18 insertions, 16 deletions
@@ -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"); |
