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 <dbrownell@users.sourceforge.net>
This commit is contained in:
Dean Glazeski 2009-12-31 16:01:32 -06:00 committed by David Brownell
parent be01786186
commit 9d167d62f2
1 changed files with 34 additions and 7 deletions

View File

@ -960,18 +960,45 @@ static COMMAND_HELPER(command_help_show, struct command *c, unsigned n,
COMMAND_HANDLER(handle_help_command) COMMAND_HANDLER(handle_help_command)
{ {
bool full = strcmp(CMD_NAME, "help") == 0; bool full = strcmp(CMD_NAME, "help") == 0;
int retval;
struct command *c = CMD_CTX->commands; struct command *c = CMD_CTX->commands;
char *match = NULL;
const char *match = "";
if (CMD_ARGC == 0) if (CMD_ARGC == 0)
match = ""; match = "";
else if (CMD_ARGC == 1) else if (CMD_ARGC >= 1) {
match = CMD_ARGV[0]; unsigned i;
else
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 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, static int command_unknown_find(unsigned argc, Jim_Obj *const *argv,