Fix `help' with unloaded modules.

* include/grub/normal.h (grub_dyncmd_get_cmd): New proto.
	* grub-core/normal/dyncmd.c (grub_dyncmd_get_cmd): New function.
	(grub_dyncmd_dispatcher): Small stylistic fix.
	* grub-core/commands/help.c (grub_cmd_help): Load missing modules when
	explicit help is requested.
This commit is contained in:
Vladimir 'phcoder' Serbinenko 2012-02-09 14:38:34 +01:00
parent e1ea3ade95
commit e4e37e8dfa
4 changed files with 82 additions and 37 deletions

View file

@ -47,7 +47,7 @@ grub_cmd_help (grub_extcmd_context_t ctxt __attribute__ ((unused)), int argc,
char *command_help;
grub_uint32_t *unicode_command_help;
grub_uint32_t *unicode_last_position;
command_help = grub_xasprintf ("%s %s", cmd->name, summary_translated);
if (!command_help)
break;
@ -99,28 +99,37 @@ grub_cmd_help (grub_extcmd_context_t ctxt __attribute__ ((unused)), int argc,
else
{
int i;
grub_command_t cmd;
grub_command_t cmd_iter, cmd;
for (i = 0; i < argc; i++)
{
currarg = args[i];
FOR_COMMANDS(cmd)
FOR_COMMANDS(cmd_iter)
{
if (cmd->prio & GRUB_PRIO_LIST_FLAG_ACTIVE)
{
if (! grub_strncmp (cmd->name, currarg, grub_strlen (currarg)))
{
if (cnt++ > 0)
grub_printf ("\n\n");
if (!(cmd_iter->prio & GRUB_PRIO_LIST_FLAG_ACTIVE))
continue;
if ((cmd->flags & GRUB_COMMAND_FLAG_EXTCMD) &&
! (cmd->flags & GRUB_COMMAND_FLAG_DYNCMD))
grub_arg_show_help ((grub_extcmd_t) cmd->data);
else
grub_printf ("%s %s %s\n%s\n", _("Usage:"), cmd->name, _(cmd->summary),
_(cmd->description));
}
if (grub_strncmp (cmd_iter->name, currarg,
grub_strlen (currarg)) != 0)
continue;
if (cmd_iter->flags & GRUB_COMMAND_FLAG_DYNCMD)
cmd = grub_dyncmd_get_cmd (cmd_iter);
else
cmd = cmd_iter;
if (!cmd)
{
grub_print_error ();
continue;
}
if (cnt++ > 0)
grub_printf ("\n\n");
if ((cmd->flags & GRUB_COMMAND_FLAG_EXTCMD) &&
! (cmd->flags & GRUB_COMMAND_FLAG_DYNCMD))
grub_arg_show_help ((grub_extcmd_t) cmd->data);
else
grub_printf ("%s %s %s\n%s\n", _("Usage:"), cmd->name,
_(cmd->summary), _(cmd->description));
}
}
}