diff options
author | Ali Mohammad Pur <ali.mpfard@gmail.com> | 2023-02-18 12:29:21 +0330 |
---|---|---|
committer | Ali Mohammad Pur <Ali.mpfard@gmail.com> | 2023-02-28 15:52:24 +0330 |
commit | 6e5ba8292942771caf5be2c507e8b1c367b42ef1 (patch) | |
tree | 14ce42af5aa35afbf34c442a796aa2067444efac | |
parent | d575c50f3ee9405ab2caa774394d98f9028c535b (diff) | |
download | serenity-6e5ba8292942771caf5be2c507e8b1c367b42ef1.zip |
LibCore: Make ArgsParser tolerate Main::Arguments with only .strings
This currently allocates in .parse(), but that's better than making the
caller do the exact same before passing us the values.
Note that this is only temporary to aid in conversion, a future commit
will remove this and switch to requiring the users to allocate the
vector instead.
-rw-r--r-- | Userland/Libraries/LibCore/ArgsParser.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/Userland/Libraries/LibCore/ArgsParser.h b/Userland/Libraries/LibCore/ArgsParser.h index 389b79c946..bfde098f34 100644 --- a/Userland/Libraries/LibCore/ArgsParser.h +++ b/Userland/Libraries/LibCore/ArgsParser.h @@ -73,6 +73,19 @@ public: bool parse(int argc, char* const* argv, FailureBehavior failure_behavior = FailureBehavior::PrintUsageAndExit); bool parse(Main::Arguments const& arguments, FailureBehavior failure_behavior = FailureBehavior::PrintUsageAndExit) { + if (arguments.argv == nullptr && arguments.argc == 0) { + // Allocate the data from arguments.strings instead. + Vector<DeprecatedString> strings; + Vector<char const*> data; + strings.ensure_capacity(arguments.strings.size()); + data.ensure_capacity(arguments.strings.size()); + for (auto& entry : arguments.strings) { + strings.append(entry); + data.append(strings.last().characters()); + } + return parse(data.size(), const_cast<char* const*>(data.data()), failure_behavior); + } + return parse(arguments.argc, arguments.argv, failure_behavior); } |