/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#include <getopt.h>
-
#include "format-util.h"
#include "hashmap.h"
#include "offline-passwd.h"
+#include "options.h"
+#include "strv.h"
#include "tests.h"
-static char *arg_root = NULL;
+static const char *arg_root = NULL;
static void test_resolve_one(const char *name) {
bool relaxed = name || arg_root;
assert_se(relaxed || r == 0);
}
-static int parse_argv(int argc, char *argv[]) {
- static const struct option options[] = {
- { "root", required_argument, NULL, 'r' },
- {}
- };
-
- int c;
-
+static int parse_argv(int argc, char *argv[], char ***ret_args) {
assert_se(argc >= 0);
assert_se(argv);
- while ((c = getopt_long(argc, argv, "r:", options, NULL)) >= 0)
- switch (c) {
- case 'r':
- arg_root = optarg;
- break;
+ OptionParser state = { argc, argv };
+ const char *arg;
- case '?':
- return -EINVAL;
+ FOREACH_OPTION(&state, c, &arg, /* on_error= */ return c)
+ switch (c) {
- default:
- assert_not_reached();
+ OPTION('r', "root", "PATH", "Operate on an alternate filesystem root"):
+ arg_root = arg;
+ break;
}
+ *ret_args = option_parser_get_args(&state);
return 0;
}
test_setup_logging(LOG_DEBUG);
- r = parse_argv(argc, argv);
+ char **args = NULL;
+ r = parse_argv(argc, argv, &args);
if (r < 0)
return r;
- if (optind >= argc)
+ if (strv_isempty(args))
test_resolve_one(NULL);
else
- while (optind < argc)
- test_resolve_one(argv[optind++]);
+ STRV_FOREACH(a, args)
+ test_resolve_one(*a);
return 0;
}