1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-14 09:14:58 +00:00

LibCore+Userland: Remove ArgsParser::add*(Vector<char const*>&)

This finally makes ArgsParser's value API free of silly char*'s!
This commit is contained in:
Ali Mohammad Pur 2023-03-01 00:31:46 +03:30 committed by Andreas Kling
parent 500044906d
commit 23c514cda3
5 changed files with 31 additions and 47 deletions

View file

@ -24,7 +24,7 @@
FlatPtr arg[SC_NARG];
char outbuf[BUFSIZ];
using Arguments = Vector<char const*>;
using Arguments = Vector<DeprecatedString>;
using ArgIter = Arguments::Iterator;
static FlatPtr parse_from(ArgIter&);
@ -41,7 +41,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
{
bool output_buffer = false;
bool list_syscalls = false;
Vector<char const*> syscall_arguments;
Arguments syscall_arguments;
Core::ArgsParser args_parser;
args_parser.set_general_help(
@ -140,7 +140,7 @@ static FlatPtr parse_parameter_buffer(ArgIter& iter)
{
Vector<FlatPtr> params_vec;
while (!iter.is_end()) {
if (strcmp(*iter, "]") == 0) {
if (*iter == "]"sv) {
++iter;
return as_buf(params_vec);
}
@ -155,36 +155,34 @@ static FlatPtr parse_parameter_buffer(ArgIter& iter)
static FlatPtr parse_from(ArgIter& iter)
{
char const* this_arg = *iter;
auto const& this_arg_string = *iter;
auto* this_arg = this_arg_string.characters();
++iter;
// Is it a forced literal?
if (this_arg[0] == ',') {
this_arg += 1;
dbgln_if(SYSCALL_1_DEBUG, "Using (forced) string >>{}<< at {:p}", this_arg, (FlatPtr)this_arg);
dbgln_if(SYSCALL_1_DEBUG, "Using (forced) string >>{}<< at {:p}", this_arg_string, (FlatPtr)this_arg);
return (FlatPtr)this_arg;
}
// Is it the output buffer?
if (strcmp(this_arg, "buf") == 0)
if (this_arg_string == "buf"sv)
return (FlatPtr)outbuf;
// Is it a parameter buffer?
if (strcmp(this_arg, "[") == 0)
if (this_arg_string == "["sv)
return parse_parameter_buffer(iter);
// Is it a number?
char* endptr = nullptr;
FlatPtr l = strtoul(this_arg, &endptr, 0);
if (*endptr == 0) {
return l;
}
if (auto l = this_arg_string.to_uint(); l.has_value())
return *l;
// Then it must be a string:
if (strcmp(this_arg, "]") == 0)
if (this_arg_string == "]"sv)
fprintf(stderr, "Warning: Treating unmatched ']' as literal string\n");
dbgln_if(SYSCALL_1_DEBUG, "Using (detected) string >>{}<< at {:p}", this_arg, (FlatPtr)this_arg);
dbgln_if(SYSCALL_1_DEBUG, "Using (detected) string >>{}<< at {:p}", this_arg_string, (FlatPtr)this_arg);
return (FlatPtr)this_arg;
}