about summary refs log tree commit diff
path: root/clients/cli/devices.c
diff options
context:
space:
mode:
Diffstat (limited to 'clients/cli/devices.c')
-rw-r--r--clients/cli/devices.c98
1 files changed, 35 insertions, 63 deletions
diff --git a/clients/cli/devices.c b/clients/cli/devices.c
index 449fa7db..65c4be72 100644
--- a/clients/cli/devices.c
+++ b/clients/cli/devices.c
@@ -286,7 +286,7 @@ usage (void)
 	              "  show [<ifname>]\n\n"
 	              "  set [ifname] <ifname> [autoconnect yes|no] [managed yes|no]\n\n"
 	              "  connect <ifname>\n\n"
-	              "  reapply <ifname> ...\n\n"
+	              "  reapply <ifname>\n\n"
 	              "  disconnect <ifname> ...\n\n"
 	              "  delete <ifname> ...\n\n"
 	              "  monitor <ifname> ...\n\n"
@@ -342,7 +342,7 @@ usage_device_reapply (void)
 {
 	g_printerr (_("Usage: nmcli device reapply { ARGUMENTS | help }\n"
 	              "\n"
-	              "ARGUMENTS := <ifname> ...\n"
+	              "ARGUMENTS := <ifname>\n"
 	              "\n"
 	              "Attempts to update device with changes to the currently active connection\n"
                       "made since it was last applied.\n\n"));
@@ -1835,11 +1835,10 @@ reapply_device_cb (GObject *object, GAsyncResult *result, gpointer user_data)
 	GError *error = NULL;
 
 	if (!nm_device_reapply_finish (device, result, &error)) {
-		g_string_printf (nmc->return_text, _("Error: not all connections reapplied."));
-		g_printerr (_("Error: Reapplying connection to device '%s' (%s) failed: %s\n"),
-		            nm_device_get_iface (device),
-		            nm_object_get_path (NM_OBJECT (device)),
-		            error->message);
+		g_string_printf (nmc->return_text, _("Error: Reapplying connection to device '%s' (%s) failed: %s"),
+		                 nm_device_get_iface (device),
+		                 nm_object_get_path (NM_OBJECT (device)),
+		                 error->message);
 		g_error_free (error);
 		nmc->return_value = NMC_RESULT_ERROR_DEV_DISCONNECT;
 		device_cb_info_finish (info, device);
@@ -1847,7 +1846,7 @@ reapply_device_cb (GObject *object, GAsyncResult *result, gpointer user_data)
 		if (nmc->print_output == NMC_PRINT_PRETTY)
 			nmc_terminal_erase_line ();
 		g_print (_("Connection successfully reapplied to device '%s'.\n"),
-			 nm_device_get_iface (device));
+		         nm_device_get_iface (device));
 		device_cb_info_finish (info, device);
 	}
 }
@@ -1855,14 +1854,14 @@ reapply_device_cb (GObject *object, GAsyncResult *result, gpointer user_data)
 static NMCResultCode
 do_device_reapply (NmCli *nmc, int argc, char **argv)
 {
-	NMDevice **devices;
-	NMDevice *device;
+	gs_free NMDevice **devices = NULL;
+	NMDevice *device = NULL;
 	DeviceCbInfo *info = NULL;
-	GSList *queue = NULL, *iter;
-	char **arg_arr = NULL;
 	char **arg_ptr = argv;
 	int arg_num = argc;
 	int i;
+	gs_free char *device_name_free = NULL;
+	const char *device_name = NULL;
 
 	/* Set default timeout for reapply operation. */
 	if (nmc->timeout == -1)
@@ -1870,69 +1869,48 @@ do_device_reapply (NmCli *nmc, int argc, char **argv)
 
 	if (argc == 0) {
 		if (nmc->ask) {
-			char *line = nmc_readline (PROMPT_INTERFACES);
-			nmc_string_to_arg_array (line, NULL, FALSE, &arg_arr, &arg_num);
-			g_free (line);
-			arg_ptr = arg_arr;
+			device_name_free = nmc_readline (PROMPT_INTERFACE);
+			device_name = device_name_free;
 		}
-		if (arg_num == 0) {
+		if (!device_name) {
 			g_string_printf (nmc->return_text, _("Error: No interface specified."));
 			nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
-			goto error;
+			return nmc->return_value;
 		}
+	} else if (argc == 1) {
+		device_name = arg_ptr[0];
+		next_arg (&arg_num, &arg_ptr);
+	} else {
+		next_arg (&arg_num, &arg_ptr);
+		g_string_printf (nmc->return_text, _("Error: unsupported argument '%s'."), *arg_ptr);
+		nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+		return nmc->return_value;
 	}
 
 	devices = get_devices_sorted (nmc->client);
-	while (arg_num > 0) {
-		device = NULL;
-		for (i = 0; devices[i]; i++) {
-			if (!g_strcmp0 (nm_device_get_iface (devices[i]), *arg_ptr)) {
-				device = devices[i];
-				break;
-			}
-		}
-
-		if (device) {
-			if (!g_slist_find (queue, device))
-				queue = g_slist_prepend (queue, device);
-			else
-				g_printerr (_("Warning: argument '%s' is duplicated.\n"), *arg_ptr);
-		} else {
-			g_printerr (_("Error: Device '%s' not found.\n"), *arg_ptr);
-			g_string_printf (nmc->return_text, _("Error: not all devices found."));
-			nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND;
+	for (i = 0; devices[i]; i++) {
+		if (!g_strcmp0 (nm_device_get_iface (devices[i]), device_name)) {
+			device = devices[i];
+			break;
 		}
-
-		/* Take next argument */
-		next_arg (&arg_num, &arg_ptr);
 	}
-	g_free (devices);
 
-	if (!queue) {
-		g_string_printf (nmc->return_text, _("Error: no valid device provided."));
+	if (!device) {
+		g_string_printf (nmc->return_text, _("Error: device '%s' not found."), device_name);
 		nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND;
-		goto error;
+		return nmc->return_value;
 	}
-	queue = g_slist_reverse (queue);
-
-	info = g_slice_new0 (DeviceCbInfo);
-	info->nmc = nmc;
 
 	nmc->nowait_flag = (nmc->timeout == 0);
 	nmc->should_wait = TRUE;
 
-	for (iter = queue; iter; iter = g_slist_next (iter)) {
-		device = iter->data;
-
-		info->queue = g_slist_prepend (info->queue, g_object_ref (device));
+	info = g_slice_new0 (DeviceCbInfo);
+	info->nmc = nmc;
+	info->queue = g_slist_prepend (info->queue, g_object_ref (device));
 
-		/* Now reapply the connection to the device */
-		nm_device_reapply_async (device, NULL, 0, 0, NULL, reapply_device_cb, info);
-	}
+	/* Now reapply the connection to the device */
+	nm_device_reapply_async (device, NULL, 0, 0, NULL, reapply_device_cb, info);
 
-error:
-	g_strfreev (arg_arr);
-	g_slist_free (queue);
 	return nmc->return_value;
 }
 
@@ -3594,9 +3572,6 @@ is_single_word (const char* line)
 		return FALSE;
 }
 
-/* Global variable defined in nmcli.c */
-extern NmCli nm_cli;
-
 static char *
 gen_func_ifnames (const char *text, int state)
 {
@@ -3670,9 +3645,6 @@ do_devices (NmCli *nmc, int argc, char **argv)
 		nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING;
 		return nmc->return_value;
 	}
-	/* Compare NM and nmcli versions */
-	if (!nmc_versions_match (nmc))
-		return nmc->return_value;
 
 	if (argc == 0) {
 		if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error))