Fix -g flag with --; and avoid overindexing if -- is set but no arguments are added

This commit is contained in:
kalaposfos13 2025-01-13 07:42:04 +01:00
parent 39c87f4d2b
commit 4aad1940a0
2 changed files with 34 additions and 8 deletions

View File

@ -127,19 +127,32 @@ int main(int argc, char* argv[]) {
auto it = arg_map.find(cur_arg); auto it = arg_map.find(cur_arg);
if (it != arg_map.end()) { if (it != arg_map.end()) {
it->second(i); // Call the associated lambda function it->second(i); // Call the associated lambda function
} else if (i == argc - 1 && !has_game_argument) {
// Assume the last argument is the game file if not specified via -g/--game
game_path = argv[i];
has_game_argument = true;
} else if (std::string(argv[i]) == "--") {
if (i + 1 == argc) {
std::cerr << "Warning: -- is set, but no game arguments are added!\n";
break;
}
for (int j = i + 1; j < argc; j++) {
game_args.push_back(argv[j]);
}
break;
} else if (std::string(argv[i + 1]) == "--") { } else if (std::string(argv[i + 1]) == "--") {
if (!has_game_argument) { if (!has_game_argument) {
game_path = argv[i]; game_path = argv[i];
has_game_argument = true; has_game_argument = true;
} }
if (i + 2 == argc) {
std::cerr << "Warning: -- is set, but no game arguments are added!\n";
break;
}
for (int j = i + 2; j < argc; j++) { for (int j = i + 2; j < argc; j++) {
game_args.push_back(argv[j]); game_args.push_back(argv[j]);
} }
break; break;
} else if (i == argc - 1 && !has_game_argument) {
// Assume the last argument is the game file if not specified via -g/--game
game_path = argv[i];
has_game_argument = true;
} else { } else {
std::cerr << "Unknown argument: " << cur_arg << ", see --help for info.\n"; std::cerr << "Unknown argument: " << cur_arg << ", see --help for info.\n";
return 1; return 1;

View File

@ -131,19 +131,32 @@ int main(int argc, char* argv[]) {
auto it = arg_map.find(cur_arg); auto it = arg_map.find(cur_arg);
if (it != arg_map.end()) { if (it != arg_map.end()) {
it->second(i); // Call the associated lambda function it->second(i); // Call the associated lambda function
} else if (i == argc - 1 && !has_game_argument) {
// Assume the last argument is the game file if not specified via -g/--game
game_path = argv[i];
has_game_argument = true;
} else if (std::string(argv[i]) == "--") {
if (i + 1 == argc) {
std::cerr << "Warning: -- is set, but no game arguments are added!\n";
break;
}
for (int j = i + 1; j < argc; j++) {
game_args.push_back(argv[j]);
}
break;
} else if (std::string(argv[i + 1]) == "--") { } else if (std::string(argv[i + 1]) == "--") {
if (!has_game_argument) { if (!has_game_argument) {
game_path = argv[i]; game_path = argv[i];
has_game_argument = true; has_game_argument = true;
} }
if (i + 2 == argc) {
std::cerr << "Warning: -- is set, but no game arguments are added!\n";
break;
}
for (int j = i + 2; j < argc; j++) { for (int j = i + 2; j < argc; j++) {
game_args.push_back(argv[j]); game_args.push_back(argv[j]);
} }
break; break;
} else if (i == argc - 1 && !has_game_argument) {
// Assume the last argument is the game file if not specified via -g/--game
game_path = argv[i];
has_game_argument = true;
} else { } else {
std::cerr << "Unknown argument: " << cur_arg << ", see --help for info.\n"; std::cerr << "Unknown argument: " << cur_arg << ", see --help for info.\n";
return 1; return 1;