From 9721b7b2dd8bd30bfeb86d906fb64b1791ecf3c2 Mon Sep 17 00:00:00 2001 From: TheFightingCatfish Date: Sat, 21 Aug 2021 00:53:14 +0800 Subject: [PATCH] LibCore: Show version and help before parsing positional arguments This allows `--version` and `--help` to work properly even if we do not supply the required positional arguments to a command. --- Userland/Libraries/LibCore/ArgsParser.cpp | 33 ++++++++++++----------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/Userland/Libraries/LibCore/ArgsParser.cpp b/Userland/Libraries/LibCore/ArgsParser.cpp index 28b9b536124be5..a10d16a5558d87 100644 --- a/Userland/Libraries/LibCore/ArgsParser.cpp +++ b/Userland/Libraries/LibCore/ArgsParser.cpp @@ -108,7 +108,23 @@ bool ArgsParser::parse(int argc, char* const* argv, FailureBehavior failure_beha } } - // We're done processing options, now let's parse positional arguments. + // We're done processing options. + // Now let's show version or help if requested. + + if (m_show_version) { + print_version(stdout); + if (failure_behavior == FailureBehavior::Exit || failure_behavior == FailureBehavior::PrintUsageAndExit) + exit(0); + return false; + } + if (m_show_help) { + print_usage(stdout, argv[0]); + if (failure_behavior == FailureBehavior::Exit || failure_behavior == FailureBehavior::PrintUsageAndExit) + exit(0); + return false; + } + + // Now let's parse positional arguments. int values_left = argc - optind; Vector num_values_for_arg; @@ -153,21 +169,6 @@ bool ArgsParser::parse(int argc, char* const* argv, FailureBehavior failure_beha } } - // We're done parsing! :) - // Now let's show version or help if requested. - if (m_show_version) { - print_version(stdout); - if (failure_behavior == FailureBehavior::Exit || failure_behavior == FailureBehavior::PrintUsageAndExit) - exit(0); - return false; - } - if (m_show_help) { - print_usage(stdout, argv[0]); - if (failure_behavior == FailureBehavior::Exit || failure_behavior == FailureBehavior::PrintUsageAndExit) - exit(0); - return false; - } - return true; }