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:
Martin Willi
2015-05-05 10:46:48 +02:00
parent 5a201e6bd0
commit 54d0d20bda
+36 -9
View File
@@ -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]);
}
}