From c214c5e5670f4d03dd0196f18e83a27d8047cb32 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Mon, 26 Feb 2018 16:38:25 +0200 Subject: [PATCH] shared/shell: Fix parsing of mandatory arguments In certain cases the arguments may no start with the mandatory commands such as when the command handler expects getopt arguments first. --- src/shared/shell.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/shared/shell.c b/src/shared/shell.c index b9563ea76..fc4c9b5a5 100644 --- a/src/shared/shell.c +++ b/src/shared/shell.c @@ -297,11 +297,22 @@ static int cmd_exec(const struct bt_shell_menu_entry *entry, } len = man - entry->arg; - man = strndup(entry->arg, len + 1); + if (entry->arg[0] == '<') + man = strndup(entry->arg, len + 1); + else { + /* Find where mandatory arguments start */ + opt = strrchr(entry->arg, '<'); + /* Skip if mandatory arguments are not in the right format */ + if (!opt || opt > man) { + opt = strdup(entry->arg); + goto optional; + } + man = strndup(opt, man - opt + 1); + } if (parse_args(man, &w, "<>", flags) < 0) { print_text(COLOR_HIGHLIGHT, - "Unable to parse mandatory command arguments"); + "Unable to parse mandatory command arguments: %s", man ); return -EINVAL; } @@ -318,7 +329,7 @@ static int cmd_exec(const struct bt_shell_menu_entry *entry, optional: if (parse_args(opt, &w, "[]", flags) < 0) { print_text(COLOR_HIGHLIGHT, - "Unable to parse optional command arguments"); + "Unable to parse optional command arguments: %s", opt); return -EINVAL; } -- 2.47.3