]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
shared/options: add helper function to count positional args
authorZbigniew Jędrzejewski-Szmek <zbyszek@amutable.com>
Tue, 24 Mar 2026 23:32:20 +0000 (00:32 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@amutable.com>
Tue, 24 Mar 2026 23:45:57 +0000 (00:45 +0100)
src/shared/options.c
src/shared/options.h
src/test/test-options.c

index 903ed62440fd1a44f0fd22b338eee70ffa42f48b..3847bd648c1fa6ab7627d085813161cf47daabea 100644 (file)
@@ -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. */
 
index f548538bd048aff576b42ab1a6bfc5cb15381ad1..fc5b748fc66d6a9ad98bfd19b6164bf18f5b3c6f 100644 (file)
@@ -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[],
index ab3a42936958cd36a7306ac2e8145ac2e1567e20..201d16d51f8951e3b5b75f0d41388cb52c302b55 100644 (file)
@@ -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(