From 5764e1e5069ad9fa80d30a33d5733b3c25456f56 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Tue, 31 Oct 2023 09:17:05 +0100 Subject: [PATCH] pki: Pre-process common arguments This way the position of --debug doesn't matter for it to apply to the parsing of all command-specific arguments. --- src/pki/command.c | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/src/pki/command.c b/src/pki/command.c index 5dd53e9de..accec5fe5 100644 --- a/src/pki/command.c +++ b/src/pki/command.c @@ -116,20 +116,41 @@ int command_getopt(char **arg) { op = getopt_long(argc, argv, command_optstring, command_opts, NULL); switch (op) + { + case '+': + case 'v': + continue; + default: + *arg = optarg; + return op; + } + } +} + +/** + * Process options common for all commands + */ +static bool process_common_opts() +{ + while (TRUE) + { + switch (getopt_long(argc, argv, command_optstring, command_opts, NULL)) { case '+': if (!options->from(options, optarg, &argc, &argv, optind)) { - /* a error value */ - return 255; + return FALSE; } continue; case 'v': dbg_default_set_level(atoi(optarg)); continue; default: - *arg = optarg; - return op; + continue; + case '?': + return FALSE; + case EOF: + return TRUE; } } } @@ -279,6 +300,11 @@ int command_dispatch(int c, char *v[]) { active = i; build_opts(); + if (!process_common_opts()) + { + return command_usage("invalid options"); + } + optind = 2; return cmds[i].call(); } }