mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-02-19 22:50:33 +01:00
cli: split out do_cmd()
This commit is contained in:
parent
a30224f6af
commit
1a88eac02a
3 changed files with 71 additions and 28 deletions
|
|
@ -1389,3 +1389,56 @@ nmc_parse_lldp_capabilities (guint value)
|
|||
|
||||
return g_string_free (str, FALSE);
|
||||
}
|
||||
|
||||
/**
|
||||
* nmc_do_cmd:
|
||||
* @nmc: Client instance
|
||||
* @cmds: Command table
|
||||
* @cmd: Command
|
||||
* @argc: Argument count
|
||||
* @argv: Arguments vector
|
||||
*
|
||||
* Picks the right callback to handle command from the command table.
|
||||
* If --help argument follows and the usage callback is specified for the command
|
||||
* it calls the usage callback.
|
||||
*
|
||||
* The command table is terminated with a %NULL command. The terminating
|
||||
* entry's handlers are called if the command is empty.
|
||||
*
|
||||
* Returns: a nmcli return code
|
||||
*/
|
||||
NMCResultCode
|
||||
nmc_do_cmd (NmCli *nmc, const NMCCommand cmds[], const char *cmd, int argc, char **argv)
|
||||
{
|
||||
const NMCCommand *c;
|
||||
|
||||
for (c = cmds; c->cmd; ++c) {
|
||||
if (cmd && matches (cmd, c->cmd) == 0)
|
||||
break;
|
||||
}
|
||||
|
||||
if (c->cmd) {
|
||||
/* A valid command was specified. */
|
||||
if (c->usage && nmc_arg_is_help (*(argv+1)))
|
||||
c->usage ();
|
||||
else
|
||||
nmc->return_value = c->func (nmc, argc-1, argv+1);
|
||||
} else if (cmd) {
|
||||
/* Not a known command. */
|
||||
if (nmc_arg_is_help (cmd) && c->usage) {
|
||||
c->usage ();
|
||||
} else {
|
||||
g_string_printf (nmc->return_text, _("Error: argument '%s' not understood. Try passing --help instead."), cmd);
|
||||
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
|
||||
}
|
||||
} else if (c->func) {
|
||||
/* No command, run the default handler. */
|
||||
nmc->return_value = c->func (nmc, argc-1, argv+1);
|
||||
} else {
|
||||
/* No command and no default handler. */
|
||||
g_string_printf (nmc->return_text, _("Error: missing argument. Try passing --help."));
|
||||
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
|
||||
}
|
||||
|
||||
return nmc->return_value;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -73,4 +73,12 @@ int nmc_rl_set_deftext (void);
|
|||
|
||||
char *nmc_parse_lldp_capabilities (guint value);
|
||||
|
||||
typedef struct {
|
||||
const char *cmd;
|
||||
NMCResultCode (*func) (NmCli *nmc, int argc, char **argv);
|
||||
void (*usage) (void);
|
||||
} NMCCommand;
|
||||
|
||||
NMCResultCode nmc_do_cmd (NmCli *nmc, const NMCCommand cmds[], const char *argv0, int argc, char **argv);
|
||||
|
||||
#endif /* NMC_COMMON_H */
|
||||
|
|
|
|||
|
|
@ -114,36 +114,18 @@ do_help (NmCli *nmc, int argc, char **argv)
|
|||
return NMC_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
static const struct cmd {
|
||||
const char *cmd;
|
||||
NMCResultCode (*func) (NmCli *nmc, int argc, char **argv);
|
||||
} nmcli_cmds[] = {
|
||||
{ "general", do_general },
|
||||
{ "monitor", do_monitor },
|
||||
{ "networking", do_networking },
|
||||
{ "radio", do_radio },
|
||||
{ "connection", do_connections },
|
||||
{ "device", do_devices },
|
||||
{ "agent", do_agent },
|
||||
{ "help", do_help },
|
||||
static const NMCCommand nmcli_cmds[] = {
|
||||
{ "general", do_general, NULL },
|
||||
{ "monitor", do_monitor, NULL },
|
||||
{ "networking", do_networking, NULL },
|
||||
{ "radio", do_radio, NULL },
|
||||
{ "connection", do_connections, NULL },
|
||||
{ "device", do_devices, NULL },
|
||||
{ "agent", do_agent, NULL },
|
||||
{ "help", do_help, NULL },
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
static NMCResultCode
|
||||
do_cmd (NmCli *nmc, const char *argv0, int argc, char **argv)
|
||||
{
|
||||
const struct cmd *c;
|
||||
|
||||
for (c = nmcli_cmds; c->cmd; ++c) {
|
||||
if (matches (argv0, c->cmd) == 0)
|
||||
return c->func (nmc, argc-1, argv+1);
|
||||
}
|
||||
|
||||
g_string_printf (nmc->return_text, _("Error: Object '%s' is unknown, try 'nmcli help'."), argv0);
|
||||
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
|
||||
return nmc->return_value;
|
||||
}
|
||||
|
||||
static NMCResultCode
|
||||
parse_command_line (NmCli *nmc, int argc, char **argv)
|
||||
{
|
||||
|
|
@ -301,7 +283,7 @@ parse_command_line (NmCli *nmc, int argc, char **argv)
|
|||
|
||||
if (argc > 1) {
|
||||
/* Now run the requested command */
|
||||
return do_cmd (nmc, argv[1], argc-1, argv+1);
|
||||
return nmc_do_cmd (nmc, nmcli_cmds, argv[1], argc-1, argv+1);
|
||||
}
|
||||
|
||||
usage (base);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue