summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAli Mohammad Pur <ali.mpfard@gmail.com>2023-02-18 12:29:21 +0330
committerAli Mohammad Pur <Ali.mpfard@gmail.com>2023-02-28 15:52:24 +0330
commit6e5ba8292942771caf5be2c507e8b1c367b42ef1 (patch)
tree14ce42af5aa35afbf34c442a796aa2067444efac
parentd575c50f3ee9405ab2caa774394d98f9028c535b (diff)
downloadserenity-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.h13
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);
}