summaryrefslogtreecommitdiff
path: root/clients
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2016-07-27 15:16:21 +0200
committerLubomir Rintel <lkundrak@v3.sk>2016-08-01 15:51:29 +0200
commite996dfbb2619c7baccd17e7f886274664a6ce98c (patch)
tree3fe1c1fe14ba681bc3317bd5e9f8955dce7d27aa /clients
parent81e8575a4652e2ce78721ab2a122f5a572140419 (diff)
downloadNetworkManager-e996dfbb2619c7baccd17e7f886274664a6ce98c.tar.gz
cli: make global flags parsing saner
Keep argv pointed at the current argument not the previous one.
Diffstat (limited to 'clients')
-rw-r--r--clients/cli/nmcli.c70
1 files changed, 36 insertions, 34 deletions
diff --git a/clients/cli/nmcli.c b/clients/cli/nmcli.c
index f3dc825d8c..00f5e755a0 100644
--- a/clients/cli/nmcli.c
+++ b/clients/cli/nmcli.c
@@ -132,18 +132,23 @@ parse_command_line (NmCli *nmc, int argc, char **argv)
argv[1] = argv[0];
argc--; argv++;
}
+ argc--; argv++;
+
/* parse options */
- while (argc > 1) {
- char *opt = argv[1];
- /* '--' ends options */
- if (strcmp (opt, "--") == 0) {
- argc--; argv++;
- break;
- }
+ while (argc) {
+ char *opt = argv[0];
if (opt[0] != '-')
break;
- if (opt[1] == '-')
+
+ if (opt[1] == '-') {
opt++;
+ /* '--' ends options */
+ if (opt[1] == '\0') {
+ argc--; argv++;
+ break;
+ }
+ }
+
if (matches (opt, "-terse") == 0) {
if (nmc->print_output == NMC_PRINT_TERSE) {
g_string_printf (nmc->return_text, _("Error: Option '--terse' is specified the second time."));
@@ -172,63 +177,59 @@ parse_command_line (NmCli *nmc, int argc, char **argv)
nmc->print_output = NMC_PRINT_PRETTY;
} else if (matches (opt, "-mode") == 0) {
nmc->mode_specified = TRUE;
- next_arg (&argc, &argv);
- if (argc <= 1) {
+ if (next_arg (&argc, &argv) != 0) {
g_string_printf (nmc->return_text, _("Error: missing argument for '%s' option."), opt);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return nmc->return_value;
}
- if (matches (argv[1], "tabular") == 0)
+ if (matches (argv[0], "tabular") == 0)
nmc->multiline_output = FALSE;
- else if (matches (argv[1], "multiline") == 0)
+ else if (matches (argv[0], "multiline") == 0)
nmc->multiline_output = TRUE;
else {
- g_string_printf (nmc->return_text, _("Error: '%s' is not valid argument for '%s' option."), argv[1], opt);
+ g_string_printf (nmc->return_text, _("Error: '%s' is not valid argument for '%s' option."), argv[0], opt);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return nmc->return_value;
}
} else if (matches (opt, "-colors") == 0) {
- next_arg (&argc, &argv);
- if (argc <= 1) {
+ if (next_arg (&argc, &argv) != 0) {
g_string_printf (nmc->return_text, _("Error: missing argument for '%s' option."), opt);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return nmc->return_value;
}
- if (matches (argv[1], "auto") == 0)
+ if (matches (argv[0], "auto") == 0)
nmc->use_colors = NMC_USE_COLOR_AUTO;
- else if (matches (argv[1], "yes") == 0)
+ else if (matches (argv[0], "yes") == 0)
nmc->use_colors = NMC_USE_COLOR_YES;
- else if (matches (argv[1], "no") == 0)
+ else if (matches (argv[0], "no") == 0)
nmc->use_colors = NMC_USE_COLOR_NO;
else {
- g_string_printf (nmc->return_text, _("Error: '%s' is not valid argument for '%s' option."), argv[1], opt);
+ g_string_printf (nmc->return_text, _("Error: '%s' is not valid argument for '%s' option."), argv[0], opt);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return nmc->return_value;
}
} else if (matches (opt, "-escape") == 0) {
- next_arg (&argc, &argv);
- if (argc <= 1) {
+ if (next_arg (&argc, &argv) != 0) {
g_string_printf (nmc->return_text, _("Error: missing argument for '%s' option."), opt);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return nmc->return_value;
}
- if (matches (argv[1], "yes") == 0)
+ if (matches (argv[0], "yes") == 0)
nmc->escape_values = TRUE;
- else if (matches (argv[1], "no") == 0)
+ else if (matches (argv[0], "no") == 0)
nmc->escape_values = FALSE;
else {
- g_string_printf (nmc->return_text, _("Error: '%s' is not valid argument for '%s' option."), argv[1], opt);
+ g_string_printf (nmc->return_text, _("Error: '%s' is not valid argument for '%s' option."), argv[0], opt);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return nmc->return_value;
}
} else if (matches (opt, "-fields") == 0) {
- next_arg (&argc, &argv);
- if (argc <= 1) {
+ if (next_arg (&argc, &argv) != 0) {
g_string_printf (nmc->return_text, _("Error: fields for '%s' options are missing."), opt);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return nmc->return_value;
}
- nmc->required_fields = g_strdup (argv[1]);
+ nmc->required_fields = g_strdup (argv[0]);
} else if (matches (opt, "-nocheck") == 0) {
/* ignore for backward compatibility */
} else if (matches (opt, "-ask") == 0) {
@@ -237,24 +238,25 @@ parse_command_line (NmCli *nmc, int argc, char **argv)
nmc->show_secrets = TRUE;
} else if (matches (opt, "-wait") == 0) {
unsigned long timeout;
- next_arg (&argc, &argv);
- if (argc <= 1) {
+ if (next_arg (&argc, &argv) != 0) {
g_string_printf (nmc->return_text, _("Error: missing argument for '%s' option."), opt);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return nmc->return_value;
}
- if (!nmc_string_to_uint (argv[1], TRUE, 0, G_MAXINT, &timeout)) {
+ if (!nmc_string_to_uint (argv[0], TRUE, 0, G_MAXINT, &timeout)) {
g_string_printf (nmc->return_text, _("Error: '%s' is not a valid timeout for '%s' option."),
- argv[1], opt);
+ argv[0], opt);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return nmc->return_value;
}
nmc->timeout = (int) timeout;
} else if (matches (opt, "-version") == 0) {
- g_print (_("nmcli tool, version %s\n"), NMCLI_VERSION);
+ if (!nmc->complete)
+ g_print (_("nmcli tool, version %s\n"), NMCLI_VERSION);
return NMC_RESULT_SUCCESS;
} else if (matches (opt, "-help") == 0) {
- usage ();
+ if (!nmc->complete)
+ usage ();
return NMC_RESULT_SUCCESS;
} else {
g_string_printf (nmc->return_text, _("Error: Option '%s' is unknown, try 'nmcli -help'."), opt);
@@ -266,7 +268,7 @@ parse_command_line (NmCli *nmc, int argc, char **argv)
}
/* Now run the requested command */
- return nmc_do_cmd (nmc, nmcli_cmds, argv[1], argc-1, argv+1);
+ return nmc_do_cmd (nmc, nmcli_cmds, *argv, argc, argv);
}
static gboolean nmcli_sigint = FALSE;