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)
|
switch (op)
|
||||||
{
|
{
|
||||||
case '+':
|
case '+':
|
||||||
if (!options->from(options, optarg, &argc, &argv, optind))
|
|
||||||
{
|
|
||||||
/* a error value */
|
|
||||||
return 255;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
case 'v':
|
case 'v':
|
||||||
dbg_default_set_level(atoi(optarg));
|
|
||||||
continue;
|
|
||||||
case 'u':
|
case 'u':
|
||||||
uri = optarg;
|
|
||||||
continue;
|
continue;
|
||||||
default:
|
default:
|
||||||
*arg = optarg;
|
*arg = optarg;
|
||||||
@@ -256,6 +247,37 @@ static void cleanup()
|
|||||||
options->destroy(options);
|
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
|
* Open vici connection, call a command
|
||||||
*/
|
*/
|
||||||
@@ -303,6 +325,11 @@ int command_dispatch(int c, char *v[])
|
|||||||
{
|
{
|
||||||
return command_usage(NULL);
|
return command_usage(NULL);
|
||||||
}
|
}
|
||||||
|
if (!process_common_opts())
|
||||||
|
{
|
||||||
|
return command_usage("invalid options");
|
||||||
|
}
|
||||||
|
optind = 2;
|
||||||
return call_command(&cmds[i]);
|
return call_command(&cmds[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user