swanctl: Fix --uri option
As we now pass the vici connection to the command dispatcher callback, we can't parse the --uri option to create the connection from the same callback. Instead pre-process the common command options in a separate loop, and ignore the same options while processing the actual command.
This commit is contained in:
+36
-9
@@ -124,17 +124,8 @@ int command_getopt(char **arg)
|
||||
switch (op)
|
||||
{
|
||||
case '+':
|
||||
if (!options->from(options, optarg, &argc, &argv, optind))
|
||||
{
|
||||
/* a error value */
|
||||
return 255;
|
||||
}
|
||||
continue;
|
||||
case 'v':
|
||||
dbg_default_set_level(atoi(optarg));
|
||||
continue;
|
||||
case 'u':
|
||||
uri = optarg;
|
||||
continue;
|
||||
default:
|
||||
*arg = optarg;
|
||||
@@ -256,6 +247,37 @@ static void cleanup()
|
||||
options->destroy(options);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
continue;
|
||||
case 'v':
|
||||
dbg_default_set_level(atoi(optarg));
|
||||
continue;
|
||||
case 'u':
|
||||
uri = optarg;
|
||||
continue;
|
||||
default:
|
||||
continue;
|
||||
case '?':
|
||||
return FALSE;
|
||||
case EOF:
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Open vici connection, call a command
|
||||
*/
|
||||
@@ -303,6 +325,11 @@ int command_dispatch(int c, char *v[])
|
||||
{
|
||||
return command_usage(NULL);
|
||||
}
|
||||
if (!process_common_opts())
|
||||
{
|
||||
return command_usage("invalid options");
|
||||
}
|
||||
optind = 2;
|
||||
return call_command(&cmds[i]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user