diff --git a/src/shared/options.c b/src/shared/options.c index 903ed62440..3847bd648c 100644 --- a/src/shared/options.c +++ b/src/shared/options.c @@ -240,7 +240,7 @@ int option_parse( return option->id; } -char** option_parser_get_args(OptionParser *state, int argc, char *argv[]) { +char** option_parser_get_args(const OptionParser *state, int argc, char *argv[]) { /* Returns positional args as a strv. * If "--" was found, it has been removed. */ diff --git a/src/shared/options.h b/src/shared/options.h index f548538bd0..fc5b748fc6 100644 --- a/src/shared/options.h +++ b/src/shared/options.h @@ -2,6 +2,7 @@ #pragma once #include "shared-forward.h" +#include "strv.h" typedef enum OptionFlags { OPTION_OPTIONAL_ARG = 1U << 0, /* Same as optional_argument in getopt */ @@ -89,7 +90,11 @@ int option_parse( #define FOREACH_OPTION(parser, opt, argc, argv, ret_a, on_error) \ FOREACH_OPTION_FULL(parser, opt, argc, argv, /* ret_o= */ NULL, ret_a, on_error) -char** option_parser_get_args(OptionParser *state, int argc, char *argv[]); +char** option_parser_get_args(const OptionParser *state, int argc, char *argv[]); +static inline size_t option_parser_get_n_args(const OptionParser *state, int argc, char *argv[]) { + return strv_length(option_parser_get_args(state, argc, argv)); +} + int _option_parser_get_help_table( const Option options[], const Option options_end[], diff --git a/src/test/test-options.c b/src/test/test-options.c index ab3a429369..201d16d51f 100644 --- a/src/test/test-options.c +++ b/src/test/test-options.c @@ -57,6 +57,8 @@ static void test_option_parse_one( char **args = option_parser_get_args(&state, argc, argv); ASSERT_TRUE(strv_equal(args, remaining)); ASSERT_STREQ(argv[0], saved_argv0); + + ASSERT_EQ(option_parser_get_n_args(&state, argc, argv), strv_length(remaining)); } static void test_option_invalid_one(