From: Zbigniew Jędrzejewski-Szmek Date: Tue, 24 Mar 2026 23:32:20 +0000 (+0100) Subject: shared/options: add helper function to count positional args X-Git-Tag: v261-rc1~744^2~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=848dd000e035ed656e8f1f5e5cdefb807acb1db4;p=thirdparty%2Fsystemd.git shared/options: add helper function to count positional args --- diff --git a/src/shared/options.c b/src/shared/options.c index 903ed62440f..3847bd648c1 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 f548538bd04..fc5b748fc66 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 ab3a4293695..201d16d51f8 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(