cli: don't return empty strings in nmc_string_to_arg_array()

and unquote strings in the array if required.
This commit is contained in:
Jiří Klimeš
2015-03-12 14:11:18 +01:00
parent 65729cb740
commit 661ef3cd46
3 changed files with 27 additions and 9 deletions

View File

@@ -2472,7 +2472,7 @@ do_connection_down (NmCli *nmc, int argc, char **argv)
if (argc == 0) { if (argc == 0) {
if (nmc->ask) { if (nmc->ask) {
line = nmc_readline (PROMPT_CONNECTION); 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);
arg_ptr = arg_arr; arg_ptr = arg_arr;
} }
if (arg_num == 0) { if (arg_num == 0) {
@@ -8869,7 +8869,7 @@ do_connection_delete (NmCli *nmc, int argc, char **argv)
if (argc == 0) { if (argc == 0) {
if (nmc->ask) { if (nmc->ask) {
line = nmc_readline (PROMPT_CONNECTION); 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);
arg_ptr = arg_arr; arg_ptr = arg_arr;
} }
if (arg_num == 0) { if (arg_num == 0) {

View File

@@ -547,17 +547,34 @@ nmc_get_user_input (const char *ask_str)
* Split string in 'line' according to 'delim' to (argument) array. * Split string in 'line' according to 'delim' to (argument) array.
*/ */
int 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; char **arr;
arr = g_strsplit_set (line ? line : "", delim ? delim : " \t", 0); arr = nmc_strsplit_set (line ? line : "", delim ? delim : " \t", 0);
while (arr && arr[i])
i++; 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; *argv = arr;
*argc = g_strv_length (arr);
return 0; return 0;
} }

View File

@@ -72,7 +72,8 @@ char *nmc_colorize (NmcTermColor color, NmcTermFormat format, const char * fmt,
void nmc_filter_out_colors_inplace (char *str); void nmc_filter_out_colors_inplace (char *str);
char *nmc_filter_out_colors (const char *str); char *nmc_filter_out_colors (const char *str);
char *nmc_get_user_input (const char *ask_str); 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); const char *nmc_string_is_valid (const char *input, const char **allowed, GError **error);
GSList *nmc_util_strv_to_slist (char **strv); GSList *nmc_util_strv_to_slist (char **strv);
char * nmc_util_strv_for_display (const char **strv); char * nmc_util_strv_for_display (const char **strv);