diff --git a/Userland/Libraries/LibCore/ArgsParser.cpp b/Userland/Libraries/LibCore/ArgsParser.cpp index a5cd5de7cd0..346a61ff1f7 100644 --- a/Userland/Libraries/LibCore/ArgsParser.cpp +++ b/Userland/Libraries/LibCore/ArgsParser.cpp @@ -191,7 +191,7 @@ bool ArgsParser::parse(Span arguments, FailureBehavior failure_behav auto& arg = m_positional_args[i]; for (int j = 0; j < num_values_for_arg[i]; j++) { StringView value = arguments[option_index++]; - if (!arg.accept_value(value)) { + if (!MUST(arg.accept_value(value))) { warnln("Invalid value for argument {}", arg.name); fail(); return false; @@ -615,7 +615,7 @@ void ArgsParser::add_positional_argument(DeprecatedString& value, char const* he name, required == Required::Yes ? 1 : 0, 1, - [&value](StringView s) { + [&value](StringView s) -> ErrorOr { value = s; return true; } @@ -630,7 +630,7 @@ void ArgsParser::add_positional_argument(StringView& value, char const* help_str name, required == Required::Yes ? 1 : 0, 1, - [&value](StringView s) { + [&value](StringView s) -> ErrorOr { value = s; return true; } @@ -645,12 +645,8 @@ void ArgsParser::add_positional_argument(String& value, char const* help_string, name, required == Required::Yes ? 1 : 0, 1, - [&value](StringView s) { - auto value_or_error = String::from_utf8(s); - if (value_or_error.is_error()) - return false; - - value = value_or_error.release_value(); + [&value](StringView s) -> ErrorOr { + value = TRY_OR_ERROR_IF_NOT_OOM(String::from_utf8(s), s); return true; } }; @@ -665,7 +661,7 @@ void ArgsParser::add_positional_argument(I& value, char const* help_string, char name, required == Required::Yes ? 1 : 0, 1, - [&value](StringView view) { + [&value](StringView view) -> ErrorOr { Optional opt; if constexpr (IsSigned) opt = view.to_int(); @@ -694,7 +690,7 @@ void ArgsParser::add_positional_argument(double& value, char const* help_string, name, required == Required::Yes ? 1 : 0, 1, - [&value](StringView s) { + [&value](StringView s) -> ErrorOr { auto opt = s.to_double(); value = opt.value_or(0.0); return opt.has_value(); @@ -710,8 +706,8 @@ void ArgsParser::add_positional_argument(Vector& values, char name, required == Required::Yes ? 1 : 0, INT_MAX, - [&values](StringView s) { - values.append(s); + [&values](StringView s) -> ErrorOr { + TRY_OR_ERROR_IF_NOT_OOM(values.try_append(s), s); return true; } }; @@ -725,8 +721,8 @@ void ArgsParser::add_positional_argument(Vector& values, char const* name, required == Required::Yes ? 1 : 0, INT_MAX, - [&values](StringView s) { - values.append(s); + [&values](StringView s) -> ErrorOr { + TRY_OR_ERROR_IF_NOT_OOM(values.try_append(s), s); return true; } }; diff --git a/Userland/Libraries/LibCore/ArgsParser.h b/Userland/Libraries/LibCore/ArgsParser.h index 964921af52a..1a1c900fc08 100644 --- a/Userland/Libraries/LibCore/ArgsParser.h +++ b/Userland/Libraries/LibCore/ArgsParser.h @@ -67,7 +67,7 @@ public: char const* name { nullptr }; int min_values { 0 }; int max_values { 1 }; - Function accept_value; + Function(StringView)> accept_value; }; bool parse(Span arguments, FailureBehavior failure_behavior = FailureBehavior::PrintUsageAndExit);