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(); } }