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:
parent
500044906d
commit
23c514cda3
5 changed files with 31 additions and 47 deletions
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue