summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2017-03-24 14:00:25 +0100
committerLubomir Rintel <lkundrak@v3.sk>2017-03-28 15:32:05 +0200
commit16902a2be66866aa541bb56ccb98c765ac21d1a2 (patch)
tree6d9901d3d9ba81b74ea5433d53cb9a53f47a3bcc
parent29af644f9ad92e7ee7b602875a3b1afbbd4f3e8e (diff)
downloadNetworkManager-16902a2be66866aa541bb56ccb98c765ac21d1a2.tar.gz
cli: use next_arg() on argument boundary
Shift argc and argc manually between argument ant its value and use next_arg() between arguments everywhere. Whill be useful to parse global arguments.
-rw-r--r--clients/cli/common.c6
-rw-r--r--clients/cli/connections.c63
-rw-r--r--clients/cli/devices.c102
-rw-r--r--clients/cli/general.c8
-rw-r--r--clients/cli/nmcli.c33
-rw-r--r--clients/cli/utils.c4
6 files changed, 144 insertions, 72 deletions
diff --git a/clients/cli/common.c b/clients/cli/common.c
index 327804fbc6..3e28eee7a9 100644
--- a/clients/cli/common.c
+++ b/clients/cli/common.c
@@ -1753,8 +1753,10 @@ nmc_do_cmd (NmCli *nmc, const NMCCommand cmds[], const char *cmd, int argc, char
c->usage ();
g_simple_async_result_complete_in_idle (simple);
g_object_unref (simple);
- } else
- call_cmd (nmc, simple, c, argc-1, argv+1);
+ } else {
+ next_arg (nmc, &argc, &argv);
+ call_cmd (nmc, simple, c, argc, argv);
+ }
} else if (cmd) {
/* Not a known command. */
if (nmc_arg_is_help (cmd) && c->usage) {
diff --git a/clients/cli/connections.c b/clients/cli/connections.c
index 2578a4963e..1a6f443950 100644
--- a/clients/cli/connections.c
+++ b/clients/cli/connections.c
@@ -1713,11 +1713,13 @@ get_connection (NmCli *nmc, int *argc, char ***argv, int *pos, GError **error)
|| strcmp (**argv, "uuid") == 0
|| strcmp (**argv, "path") == 0) {
selector = **argv;
- if (next_arg (argc, argv) != 0) {
+ if (!*argc) {
g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
_("%s argument is missing"), selector);
return NULL;
}
+ (*argc)--;
+ (*argv)++;
}
connections = nm_client_get_connections (nmc->client);
@@ -1764,11 +1766,13 @@ do_connections_show (NmCli *nmc, int argc, char **argv)
show_secrets = TRUE;
next_arg (&argc, &argv);
} else if (!order && nmc_arg_is_option (*argv, "order")) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_set_error_literal (&err, NMCLI_ERROR, 0,
_("'--order' argument is missing"));
goto finish;
}
+ argc--;
+ argv++;
/* TODO: complete --order */
order = parse_preferred_connection_order (*argv, &err);
if (err)
@@ -1856,7 +1860,7 @@ do_connections_show (NmCli *nmc, int argc, char **argv)
|| strcmp (*argv, "path") == 0
|| strcmp (*argv, "apath") == 0) {
selector = *argv;
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto finish;
@@ -2596,31 +2600,37 @@ do_connection_up (NmCli *nmc, int argc, char **argv)
nmc_complete_strings (*argv, "ifname", "ap", "passwd-file", NULL);
if (strcmp (*argv, "ifname") == 0) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
return NMC_RESULT_ERROR_USER_INPUT;
}
+ argc--;
+ argv++;
ifname = *argv;
if (argc == 1 && nmc->complete)
nmc_complete_device (nmc->client, ifname, ap != NULL);
}
else if (strcmp (*argv, "ap") == 0) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
return NMC_RESULT_ERROR_USER_INPUT;
}
+ argc--;
+ argv++;
ap = *argv;
if (argc == 1 && nmc->complete)
nmc_complete_bssid (nmc->client, ifname, ap);
}
else if (strcmp (*argv, "passwd-file") == 0) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
return NMC_RESULT_ERROR_USER_INPUT;
}
+ argc--;
+ argv++;
if (argc == 1 && nmc->complete)
nmc->return_value = NMC_RESULT_COMPLETE_FILE;
@@ -2630,8 +2640,7 @@ do_connection_up (NmCli *nmc, int argc, char **argv)
g_printerr (_("Unknown parameter: %s\n"), *argv);
}
- argc--;
- argv++;
+ next_arg (&argc, &argv);
}
if (nmc->complete)
@@ -2787,11 +2796,13 @@ do_connection_down (NmCli *nmc, int argc, char **argv)
|| strcmp (*arg_ptr, "apath") == 0) {
selector = *arg_ptr;
- if (next_arg (&arg_num, &arg_ptr) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), selector);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto finish;
}
+ argc--;
+ argv++;
}
connections = nm_client_get_connections (nmc->client);
@@ -4501,7 +4512,8 @@ get_value (const char **value, int *argc, char ***argv, const char *option, GErr
else
*value = *argv[0];
- next_arg (argc, argv);
+ (*argc)--;
+ (*argv)++;
return TRUE;
}
@@ -4565,7 +4577,8 @@ nmc_read_connection_properties (NmCli *nmc,
return FALSE;
}
- next_arg (argc, argv);
+ (*argc)--;
+ (*argv)++;
if (!get_value (&value, argc, argv, option, error))
return FALSE;
@@ -4604,7 +4617,8 @@ nmc_read_connection_properties (NmCli *nmc,
if (*argc == 1 && nmc->complete)
complete_property_name (nmc, connection, modifier, option, NULL);
- next_arg (argc, argv);
+ (*argc)--;
+ (*argv)++;
if (!get_value (&value, argc, argv, option, error))
return FALSE;
@@ -4947,13 +4961,15 @@ read_properties:
/* It would be better if "save" was a separate argument and not
* mixed with properties, but there's not much we can do about it now. */
g_clear_error (&error);
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text,
_("Error: value for '%s' argument is required."),
"save");
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto finish;
}
+ argc--;
+ argv++;
if (!nmc_string_to_bool (*argv, &save_bool, &error)) {
g_string_printf (nmc->return_text, _("Error: 'save': %s."),
error->message);
@@ -8586,12 +8602,14 @@ do_connection_import (NmCli *nmc, int argc, char **argv)
}
if (strcmp (*argv, "type") == 0) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto finish;
}
+ argc--;
+ argv++;
if (argc == 1 && nmc->complete)
nmc_complete_vpn_service (*argv);
@@ -8601,11 +8619,13 @@ do_connection_import (NmCli *nmc, int argc, char **argv)
g_printerr (_("Warning: 'type' already specified, ignoring extra one.\n"));
} else if (strcmp (*argv, "file") == 0) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto finish;
}
+ argc--;
+ argv++;
if (argc == 1 && nmc->complete)
nmc->return_value = NMC_RESULT_COMPLETE_FILE;
if (!filename)
@@ -8618,8 +8638,7 @@ do_connection_import (NmCli *nmc, int argc, char **argv)
goto finish;
}
- argc--;
- argv++;
+ next_arg (&argc, &argv);
}
if (nmc->complete)
@@ -8721,10 +8740,11 @@ do_connection_export (NmCli *nmc, int argc, char **argv)
if (nmc->complete)
return nmc->return_value;
- if (next_arg (&argc, &argv) == 0)
+ if (argc) {
out_name = *argv;
- else if (nmc->ask)
- out_name = out_name_ask = nmc_readline (_("Output file name: "));
+ argc--;
+ argv++;
+ }
if (next_arg (argc_ptr, argv_ptr) == 0) {
g_string_printf (nmc->return_text, _("Error: unknown extra argument: '%s'."), *argv);
@@ -8732,6 +8752,9 @@ do_connection_export (NmCli *nmc, int argc, char **argv)
goto finish;
}
+ if (out_name == NULL && nmc->ask)
+ out_name = out_name_ask = nmc_readline (_("Output file name: "));
+
type = nm_connection_get_connection_type (connection);
if (g_strcmp0 (type, NM_SETTING_VPN_SETTING_NAME) != 0) {
g_string_printf (nmc->return_text, _("Error: the connection is not VPN."));
diff --git a/clients/cli/devices.c b/clients/cli/devices.c
index b1677ef49d..47ee294019 100644
--- a/clients/cli/devices.c
+++ b/clients/cli/devices.c
@@ -1496,8 +1496,7 @@ do_devices_status (NmCli *nmc, int argc, char **argv)
while (argc > 0) {
g_printerr (_("Unknown parameter: %s\n"), *argv);
- argc--;
- argv++;
+ next_arg (&argc, &argv);
}
if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
@@ -2290,8 +2289,7 @@ do_device_set (NmCli *nmc, int argc, char **argv)
gs_free_error GError *error = NULL;
if (argc >= 1 && g_strcmp0 (*argv, "ifname") == 0) {
- argc--;
- argv++;
+ next_arg (&argc, &argv);
}
device = get_device (nmc, &argc, &argv, &error);
@@ -2313,10 +2311,12 @@ do_device_set (NmCli *nmc, int argc, char **argv)
nmc_complete_strings (*argv, "managed", "autoconnect", NULL);
if (matches (*argv, "managed")) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: '%s' argument is missing."), *(argv-1));
return NMC_RESULT_ERROR_USER_INPUT;
}
+ argc--;
+ argv++;
if (argc == 1 && nmc->complete)
nmc_complete_bool (*argv);
if (!nmc_string_to_bool (*argv, &flag, &error)) {
@@ -2328,10 +2328,12 @@ do_device_set (NmCli *nmc, int argc, char **argv)
values[DEV_SET_MANAGED].value = flag;
}
else if (matches (*argv, "autoconnect")) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: '%s' argument is missing."), *(argv-1));
return NMC_RESULT_ERROR_USER_INPUT;
}
+ argc--;
+ argv++;
if (argc == 1 && nmc->complete)
nmc_complete_bool (*argv);
if (!nmc_string_to_bool (*argv, &flag, &error)) {
@@ -2632,18 +2634,22 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
nmc_complete_strings (*argv, "ifname", "bssid", NULL);
if (strcmp (*argv, "ifname") == 0) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
return NMC_RESULT_ERROR_USER_INPUT;
}
+ argc--;
+ argv++;
ifname = *argv;
complete_device (devices, ifname, TRUE);
} else if (strcmp (*argv, "bssid") == 0 || strcmp (*argv, "hwaddr") == 0) {
/* hwaddr is deprecated and will be removed later */
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
return NMC_RESULT_ERROR_USER_INPUT;
}
+ argc--;
+ argv++;
bssid_user = *argv;
if (argc == 1 && nmc->complete)
complete_aps (devices, NULL, bssid_user, NULL);
@@ -2651,8 +2657,7 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
g_printerr (_("Unknown parameter: %s\n"), *argv);
}
- argc--;
- argv++;
+ next_arg (&argc, &argv);
}
if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
@@ -2849,8 +2854,7 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv)
if (argc == 1 && nmc->complete)
complete_aps (devices, NULL, param_user, param_user);
- argc--;
- argv++;
+ next_arg (&argc, &argv);
} else {
/* nmc_do_cmd() should not call this with argc=0. */
g_assert (!nmc->complete);
@@ -2875,7 +2879,7 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv)
}
if (strcmp (*argv, "ifname") == 0) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto finish;
@@ -2883,11 +2887,13 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv)
ifname = *argv;
complete_device (devices, ifname, TRUE);
} else if (strcmp (*argv, "bssid") == 0) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto finish;
}
+ argc--;
+ argv++;
bssid = *argv;
if (argc == 1 && nmc->complete)
complete_aps (devices, NULL, bssid, NULL);
@@ -2899,18 +2905,22 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv)
goto finish;
}
} else if (strcmp (*argv, "password") == 0) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto finish;
}
+ argc--;
+ argv++;
password = *argv;
} else if (strcmp (*argv, "wep-key-type") == 0) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto finish;
}
+ argc--;
+ argv++;
if (argc == 1 && nmc->complete)
nmc_complete_strings (*argv, "key", "phrase", NULL);
if (strcmp (*argv, "key") == 0)
@@ -2925,19 +2935,23 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv)
goto finish;
}
} else if (strcmp (*argv, "name") == 0) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto finish;
}
+ argc--;
+ argv++;
con_name = *argv;
} else if (strcmp (*argv, "private") == 0) {
GError *err_tmp = NULL;
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto finish;
}
+ argc--;
+ argv++;
if (argc == 1 && nmc->complete)
nmc_complete_bool (*argv);
if (!nmc_string_to_bool (*argv, &private, &err_tmp)) {
@@ -2948,11 +2962,13 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv)
}
} else if (strcmp (*argv, "hidden") == 0) {
GError *err_tmp = NULL;
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto finish;
}
+ argc--;
+ argv++;
if (argc == 1 && nmc->complete)
nmc_complete_bool (*argv);
if (!nmc_string_to_bool (*argv, &hidden, &err_tmp)) {
@@ -2965,8 +2981,7 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv)
g_printerr (_("Unknown parameter: %s\n"), *argv);
}
- argc--;
- argv++;
+ next_arg (&argc, &argv);
}
if (nmc->complete)
@@ -3324,34 +3339,42 @@ do_device_wifi_hotspot (NmCli *nmc, int argc, char **argv)
}
if (strcmp (*argv, "ifname") == 0) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
return NMC_RESULT_ERROR_USER_INPUT;
}
+ argc--;
+ argv++;
ifname = *argv;
if (argc == 1 && nmc->complete)
complete_device (devices, ifname, TRUE);
} else if (strcmp (*argv, "con-name") == 0) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
return NMC_RESULT_ERROR_USER_INPUT;
}
+ argc--;
+ argv++;
con_name = *argv;
} else if (strcmp (*argv, "ssid") == 0) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
return NMC_RESULT_ERROR_USER_INPUT;
}
+ argc--;
+ argv++;
ssid = *argv;
if (strlen (ssid) > 32) {
g_string_printf (nmc->return_text, _("Error: ssid is too long."));
return NMC_RESULT_ERROR_USER_INPUT;
}
} else if (strcmp (*argv, "band") == 0) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
return NMC_RESULT_ERROR_USER_INPUT;
}
+ argc--;
+ argv++;
band = *argv;
if (argc == 1 && nmc->complete)
nmc_complete_strings (band, "a", "bg", NULL);
@@ -3361,16 +3384,20 @@ do_device_wifi_hotspot (NmCli *nmc, int argc, char **argv)
return NMC_RESULT_ERROR_USER_INPUT;
}
} else if (strcmp (*argv, "channel") == 0) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
return NMC_RESULT_ERROR_USER_INPUT;
}
+ argc--;
+ argv++;
channel = *argv;
} else if (strcmp (*argv, "password") == 0) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
return NMC_RESULT_ERROR_USER_INPUT;
}
+ argc--;
+ argv++;
password = *argv;
/* --show-password is deprecated in favour of global --show-secrets option */
/* Keep it here for backwards compatibility */
@@ -3381,8 +3408,7 @@ do_device_wifi_hotspot (NmCli *nmc, int argc, char **argv)
return NMC_RESULT_ERROR_USER_INPUT;
}
- argc--;
- argv++;
+ next_arg (&argc, &argv);
}
show_password = nmc->show_secrets || show_password;
@@ -3539,26 +3565,29 @@ do_device_wifi_rescan (NmCli *nmc, int argc, char **argv)
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto finish;
}
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto finish;
}
+ argc--;
+ argv++;
ifname = *argv;
if (argc == 1 && nmc->complete)
complete_device (devices, ifname, TRUE);
} else if (strcmp (*argv, "ssid") == 0) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto finish;
}
+ argc--;
+ argv++;
g_ptr_array_add (ssids, *argv);
} else if (!nmc->complete)
g_printerr (_("Unknown parameter: %s\n"), *argv);
- argc--;
- argv++;
+ next_arg (&argc, &argv);
}
if (nmc->complete)
@@ -3715,10 +3744,12 @@ do_device_lldp_list (NmCli *nmc, int argc, char **argv)
nmc_complete_strings (*argv, "ifname", NULL);
if (strcmp (*argv, "ifname") == 0) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
return NMC_RESULT_ERROR_USER_INPUT;
}
+ argc--;
+ argv++;
device = get_device (nmc, &argc, &argv, &error);
if (!device) {
@@ -3730,8 +3761,7 @@ do_device_lldp_list (NmCli *nmc, int argc, char **argv)
return NMC_RESULT_ERROR_USER_INPUT;
}
- argc--;
- argv++;
+ next_arg (&argc, &argv);
}
if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
diff --git a/clients/cli/general.c b/clients/cli/general.c
index c11697350a..24718ad468 100644
--- a/clients/cli/general.c
+++ b/clients/cli/general.c
@@ -655,20 +655,24 @@ do_general_logging (NmCli *nmc, int argc, char **argv)
nmc_complete_strings (*argv, "level", "domains", NULL);
if (matches (*argv, "level")) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: '%s' argument is missing."), *(argv-1));
return NMC_RESULT_ERROR_USER_INPUT;
}
+ argc--;
+ argv++;
if (argc == 1 && nmc->complete) {
nmc_complete_strings_nocase (*argv, "TRACE", "DEBUG", "INFO", "WARN",
"ERR", "OFF", "KEEP", NULL);
}
level = *argv;
} else if (matches (*argv, "domains")) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: '%s' argument is missing."), *(argv-1));
return NMC_RESULT_ERROR_USER_INPUT;
}
+ argc--;
+ argv++;
if (argc == 1 && nmc->complete) {
nmc_complete_strings_nocase (*argv, "PLATFORM", "RFKILL", "ETHER", "WIFI", "BT",
"MB", "DHCP4", "DHCP6", "PPP", "WIFI_SCAN", "IP4",
diff --git a/clients/cli/nmcli.c b/clients/cli/nmcli.c
index f19914979e..3951e7b1a0 100644
--- a/clients/cli/nmcli.c
+++ b/clients/cli/nmcli.c
@@ -219,9 +219,9 @@ process_command_line (NmCli *nmc, int argc, char **argv)
if (argc > 1 && nm_streq (argv[1], "--complete-args")) {
nmc->complete = TRUE;
argv[1] = argv[0];
- argc--; argv++;
+ next_arg (&argc, &argv);
}
- argc--; argv++;
+ next_arg (&argc, &argv);
/* parse options */
while (argc) {
@@ -239,7 +239,7 @@ process_command_line (NmCli *nmc, int argc, char **argv)
opt++;
/* '--' ends options */
if (opt[1] == '\0') {
- argc--; argv++;
+ next_arg (&argc, &argv);
break;
}
}
@@ -272,11 +272,13 @@ process_command_line (NmCli *nmc, int argc, char **argv)
nmc->print_output = NMC_PRINT_PRETTY;
} else if (matches (opt, "-mode")) {
nmc->mode_specified = TRUE;
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: missing argument for '%s' option."), opt);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return FALSE;
}
+ argc--;
+ argv++;
if (argc == 1 && nmc->complete)
nmc_complete_strings (argv[0], "tabular", "multiline", NULL);
if (matches (argv[0], "tabular"))
@@ -289,11 +291,13 @@ process_command_line (NmCli *nmc, int argc, char **argv)
return FALSE;
}
} else if (matches (opt, "-colors")) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: missing argument for '%s' option."), opt);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return FALSE;
}
+ argc--;
+ argv++;
if (argc == 1 && nmc->complete)
nmc_complete_strings (argv[0], "yes", "no", "auto", NULL);
if (matches (argv[0], "auto"))
@@ -308,11 +312,13 @@ process_command_line (NmCli *nmc, int argc, char **argv)
return FALSE;
}
} else if (matches (opt, "-escape")) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: missing argument for '%s' option."), opt);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return FALSE;
}
+ argc--;
+ argv++;
if (argc == 1 && nmc->complete)
nmc_complete_strings (argv[0], "yes", "no", NULL);
if (matches (argv[0], "yes"))
@@ -325,20 +331,24 @@ process_command_line (NmCli *nmc, int argc, char **argv)
return FALSE;
}
} else if (matches (opt, "-fields")) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: fields for '%s' options are missing."), opt);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return FALSE;
}
+ argc--;
+ argv++;
if (argc == 1 && nmc->complete)
complete_fields (argv[0]);
nmc->required_fields = g_strdup (argv[0]);
} else if (matches (opt, "-get-values")) {
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: fields for '%s' options are missing."), opt);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return FALSE;
}
+ argc--;
+ argv++;
if (argc == 1 && nmc->complete)
complete_fields (argv[0]);
nmc->required_fields = g_strdup (argv[0]);
@@ -356,11 +366,13 @@ process_command_line (NmCli *nmc, int argc, char **argv)
nmc->show_secrets = TRUE;
} else if (matches (opt, "-wait")) {
unsigned long timeout;
- if (next_arg (&argc, &argv) != 0) {
+ if (!argc) {
g_string_printf (nmc->return_text, _("Error: missing argument for '%s' option."), opt);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return FALSE;
}
+ argc--;
+ argv++;
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[0], opt);
@@ -381,8 +393,7 @@ process_command_line (NmCli *nmc, int argc, char **argv)
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return FALSE;
}
- argc--;
- argv++;
+ next_arg (&argc, &argv);
}
/* Now run the requested command */
diff --git a/clients/cli/utils.c b/clients/cli/utils.c
index 03c7716727..580db7b95d 100644
--- a/clients/cli/utils.c
+++ b/clients/cli/utils.c
@@ -117,11 +117,13 @@ nmc_parse_args (nmc_arg_t *arg_arr, gboolean last, int *argc, char ***argv, GErr
}
if (p->has_value) {
- if (next_arg (argc, argv) != 0) {
+ if (!argc) {
g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
_("Error: value for '%s' argument is required."), *(*argv-1));
return FALSE;
}
+ argc--;
+ argv++;
*(p->value) = **argv;
}
p->found = TRUE;