From 12a68a523bddff5f4a4d8a709bbd18d8337aa44a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= Date: Thu, 12 Mar 2015 14:11:18 +0100 Subject: [PATCH] cli: don't return empty strings in nmc_string_to_arg_array() and unquote strings in the array if required. (cherry picked from commit 661ef3cd46f0d68018d2556ab4c24bf1824919d5) --- clients/cli/connections.c | 4 ++-- clients/cli/utils.c | 29 +++++++++++++++++++++++------ clients/cli/utils.h | 3 ++- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/clients/cli/connections.c b/clients/cli/connections.c index 19b00f7be5..cdf8b6fa93 100644 --- a/clients/cli/connections.c +++ b/clients/cli/connections.c @@ -2334,7 +2334,7 @@ do_connection_down (NmCli *nmc, int argc, char **argv) if (argc == 0) { if (nmc->ask) { line = nmc_readline (PROMPT_CONNECTION); - nmc_string_to_arg_array (line, "", &arg_arr, &arg_num); + nmc_string_to_arg_array (line, "", TRUE, &arg_arr, &arg_num); g_free (line); arg_ptr = arg_arr; } @@ -8834,7 +8834,7 @@ do_connection_delete (NmCli *nmc, int argc, char **argv) if (argc == 0) { if (nmc->ask) { char *line = nmc_readline (PROMPT_CONNECTION); - nmc_string_to_arg_array (line, "", &arg_arr, &arg_num); + nmc_string_to_arg_array (line, "", TRUE, &arg_arr, &arg_num); g_free (line); arg_ptr = arg_arr; } diff --git a/clients/cli/utils.c b/clients/cli/utils.c index e7eb2dfdf6..dfd002edce 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; } diff --git a/clients/cli/utils.h b/clients/cli/utils.h index 3323fb7357..77e697af66 100644 --- a/clients/cli/utils.h +++ b/clients/cli/utils.h @@ -69,7 +69,8 @@ void nmc_terminal_show_progress (const char *str); const char *nmc_term_color_sequence (NmcTermColor color); char *nmc_colorize (NmcTermColor color, const char * fmt, ...); char *nmc_get_user_input (const char *ask_str); -int nmc_string_to_arg_array (const char *line, const char *delim, char ***argv, int *argc); +int nmc_string_to_arg_array (const char *line, const char *delim, gboolean unquote, + char ***argv, int *argc); const char *nmc_string_is_valid (const char *input, const char **allowed, GError **error); GSList *nmc_util_strv_to_slist (char **strv); char * nmc_util_strv_for_display (const char **strv, gboolean brackets);