diff options
author | Lubomir Rintel <lkundrak@v3.sk> | 2017-03-24 14:00:25 +0100 |
---|---|---|
committer | Lubomir Rintel <lkundrak@v3.sk> | 2017-03-28 15:32:05 +0200 |
commit | 16902a2be66866aa541bb56ccb98c765ac21d1a2 (patch) | |
tree | 6d9901d3d9ba81b74ea5433d53cb9a53f47a3bcc | |
parent | 29af644f9ad92e7ee7b602875a3b1afbbd4f3e8e (diff) | |
download | NetworkManager-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.c | 6 | ||||
-rw-r--r-- | clients/cli/connections.c | 63 | ||||
-rw-r--r-- | clients/cli/devices.c | 102 | ||||
-rw-r--r-- | clients/cli/general.c | 8 | ||||
-rw-r--r-- | clients/cli/nmcli.c | 33 | ||||
-rw-r--r-- | clients/cli/utils.c | 4 |
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; |