do not iterate argv twice

master
Daniel Kolesa 2016-10-06 20:29:07 +02:00
parent da8120f5c8
commit 58b54aff66
1 changed files with 8 additions and 13 deletions

View File

@ -287,7 +287,8 @@ int main(int argc, char **argv) {
}); });
int firstarg = 0; int firstarg = 0;
bool has_inter = false, has_ver = false, has_help = false, has_str = false; bool has_inter = false, has_ver = false, has_help = false;
char const *has_str = nullptr;
for (int i = 1; i < argc; ++i) { for (int i = 1; i < argc; ++i) {
if (argv[i][0] != '-') { if (argv[i][0] != '-') {
firstarg = i; firstarg = i;
@ -326,13 +327,16 @@ int main(int argc, char **argv) {
has_help = true; has_help = true;
break; break;
case 'e': case 'e':
has_str = true;
if (argv[i][2] == '\0') { if (argv[i][2] == '\0') {
++i; ++i;
if (!argv[i]) { if (!argv[i]) {
firstarg = -1; firstarg = -1;
goto endargs; goto endargs;
} else {
has_str = argv[i];
} }
} else {
has_str = argv[i] + 2;
} }
break; break;
default: default:
@ -352,17 +356,8 @@ endargs:
print_usage(argv[0], false); print_usage(argv[0], false);
return 0; return 0;
} }
for (int i = 1; i < ((firstarg > 0) ? firstarg : argc); ++i) { if (has_str) {
switch (argv[i][1]) { do_call(gcs, has_str);
case 'e': {
auto str = argv[i] + 2;
if (*str == '\0') {
str = argv[++i];
}
do_call(gcs, str);
break;
}
}
} }
if (firstarg) { if (firstarg) {
do_call(gcs, argv[firstarg], true); do_call(gcs, argv[firstarg], true);