From: Tobias Brunner Date: Tue, 31 Oct 2023 08:17:05 +0000 (+0100) Subject: pki: Pre-process common arguments X-Git-Tag: 5.9.12rc1~2^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5764e1e5069ad9fa80d30a33d5733b3c25456f56;p=thirdparty%2Fstrongswan.git 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. --- diff --git a/src/pki/command.c b/src/pki/command.c index 5dd53e9dec..accec5fe51 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(); } }