summary refs log tree commit diff
path: root/clients/cli/utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'clients/cli/utils.c')
-rw-r--r--clients/cli/utils.c37
1 files changed, 28 insertions, 9 deletions
diff --git a/clients/cli/utils.c b/clients/cli/utils.c
index 60cf9f93..dfd002ed 100644
--- a/clients/cli/utils.c
+++ b/clients/cli/utils.c
@@ -454,17 +454,34 @@ nmc_get_user_input (const char *ask_str)
  * Split string in 'line' according to 'delim' to (argument) array.
  */
 int
-nmc_string_to_arg_array (const char *line, const char *delim, char ***argv, int *argc)
+nmc_string_to_arg_array (const char *line, const char *delim, gboolean unquote,
+                         char ***argv, int *argc)
 {
-	int i = 0;
 	char **arr;
 
-	arr = g_strsplit_set (line ? line : "", delim ? delim : " \t", 0);
-	while (arr && arr[i])
-		i++;
+	arr = nmc_strsplit_set (line ? line : "", delim ? delim : " \t", 0);
+
+	if (unquote) {
+		int i = 0;
+		char *s;
+		size_t l;
+		const char *quotes = "\"'";
+
+		while (arr && arr[i]) {
+			s = arr[i];
+			l = strlen (s);
+			if (l >= 2) {
+				if (strchr (quotes, s[0]) && s[l-1] == s[0]) {
+					memmove (s, s+1, l-2);
+					s[l-2] = '\0';
+				}
+			}
+			i++;
+		}
+	}
 
-	*argc = i;
 	*argv = arr;
+	*argc = g_strv_length (arr);
 
 	return 0;
 }
@@ -544,20 +561,22 @@ nmc_util_strv_to_slist (char **strv)
  * Returns: a newly allocated string. Caller must free it with g_free().
  */
 char *
-nmc_util_strv_for_display (const char **strv)
+nmc_util_strv_for_display (const char **strv, gboolean brackets)
 {
 	GString *result;
 	guint i = 0;
 
 	result = g_string_sized_new (150);
-	g_string_append_c (result, '[');
+	if (brackets)
+		g_string_append_c (result, '[');
 	while (strv && strv[i]) {
 		if (result->len > 1)
 			g_string_append (result, ", ");
 		g_string_append (result, strv[i]);
 		i++;
 	}
-	g_string_append_c (result, ']');
+	if (brackets)
+		g_string_append_c (result, ']');
 
 	return g_string_free (result, FALSE);
 }