From 9d167d62f2eadf81e0028e471e05154c9aabbbfb Mon Sep 17 00:00:00 2001 From: Dean Glazeski Date: Thu, 31 Dec 2009 16:01:32 -0600 Subject: [PATCH] Fix usage/help search for subcommands. This makes it so that the usage/help command properly uses the whole command, including subcommand, in the search for help information. This previously caused erroneous output from the usage command handler. Signed-off-by: David Brownell --- src/helper/command.c | 41 ++++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/src/helper/command.c b/src/helper/command.c index e55f9e73e..b4e31ea1a 100644 --- a/src/helper/command.c +++ b/src/helper/command.c @@ -960,18 +960,45 @@ static COMMAND_HELPER(command_help_show, struct command *c, unsigned n, COMMAND_HANDLER(handle_help_command) { bool full = strcmp(CMD_NAME, "help") == 0; - + int retval; struct command *c = CMD_CTX->commands; + char *match = NULL; - const char *match = ""; if (CMD_ARGC == 0) match = ""; - else if (CMD_ARGC == 1) - match = CMD_ARGV[0]; - else + else if (CMD_ARGC >= 1) { + unsigned i; + + for (i = 0; i < CMD_ARGC; ++i) { + if (NULL != match) { + char *prev = match; + + match = alloc_printf("%s %s", match, + CMD_ARGV[i]); + free(prev); + if (NULL == match) { + LOG_ERROR("unable to build " + "search string"); + return -ENOMEM; + } + } else { + match = alloc_printf("%s", CMD_ARGV[i]); + if (NULL == match) { + LOG_ERROR("unable to build " + "search string"); + return -ENOMEM; + } + } + } + } else return ERROR_COMMAND_SYNTAX_ERROR; - - return CALL_COMMAND_HANDLER(command_help_show_list, c, 0, full, match); + + retval = CALL_COMMAND_HANDLER(command_help_show_list, + c, 0, full, match); + + if (CMD_ARGC >= 1) + free(match); + return retval; } static int command_unknown_find(unsigned argc, Jim_Obj *const *argv,