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:
parent
e1ea3ade95
commit
e4e37e8dfa
4 changed files with 82 additions and 37 deletions
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue