From 6e5ba8292942771caf5be2c507e8b1c367b42ef1 Mon Sep 17 00:00:00 2001 From: Ali Mohammad Pur Date: Sat, 18 Feb 2023 12:29:21 +0330 Subject: [PATCH] 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. --- Userland/Libraries/LibCore/ArgsParser.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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 strings; + Vector 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(data.data()), failure_behavior); + } + return parse(arguments.argc, arguments.argv, failure_behavior); }