2005-08-14 Yoshinori K. Okuji <okuji@enbug.org>
* normal/menu.c (run_menu_entry): * normal/command.c (grub_command_execute): If INTERACTIVE is false and GRUB_COMMAND_FLAG_NO_ECHO is not specified, print CMDLINE. Disable the pager if INTERACTIVE is true. All callers are changed. * normal/main.c (grub_normal_execute): Read command.lst and fs.lst before reading a config file. * normal/main.c (read_config_file): Even if a command is not found, register it if it is within an entry. * util/grub-emu.c: Include sys/types.h and unistd.h. (options): Added --hold. (struct arguments): Added a new member "hold". (parse_opt): If KEY is 'H', set ARGS->HOLD to ARG or -1 if ARG is missing. (main): Initialize ARGS.HOLD to zero. Wait until ARGS.HOLD is cleared by a debugger, if it is not zero. * include/grub/normal.h (grub_command_execute): Add an argument INTERACTIVE.
This commit is contained in:
parent
e51f85ae35
commit
0a74e62fde
8 changed files with 98 additions and 67 deletions
|
@ -178,9 +178,35 @@ read_config_file (const char *config)
|
|||
while (get_line (file, cmdline, sizeof (cmdline)))
|
||||
{
|
||||
grub_command_t cmd;
|
||||
|
||||
|
||||
cmd = grub_command_find (cmdline);
|
||||
grub_errno = GRUB_ERR_NONE;
|
||||
|
||||
if (cur_entry)
|
||||
{
|
||||
if (! cmd || ! (cmd->flags & GRUB_COMMAND_FLAG_TITLE))
|
||||
{
|
||||
cur_cmd = (grub_command_list_t) grub_malloc (sizeof (*cur_cmd));
|
||||
if (! cur_cmd)
|
||||
goto fail;
|
||||
|
||||
cur_cmd->command = grub_strdup (cmdline);
|
||||
if (! cur_cmd->command)
|
||||
{
|
||||
grub_free (cur_cmd);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
cur_cmd->next = 0;
|
||||
|
||||
*next_cmd = cur_cmd;
|
||||
next_cmd = &(cur_cmd->next);
|
||||
|
||||
cur_entry->num++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (! cmd)
|
||||
{
|
||||
grub_printf ("Unknown command `%s' is ignored.\n", cmdline);
|
||||
|
@ -218,12 +244,12 @@ read_config_file (const char *config)
|
|||
|
||||
menu->size++;
|
||||
}
|
||||
else if (! cur_entry)
|
||||
else
|
||||
{
|
||||
/* Run the command if possible. */
|
||||
if (cmd->flags & GRUB_COMMAND_FLAG_MENU)
|
||||
{
|
||||
grub_command_execute (cmdline);
|
||||
grub_command_execute (cmdline, 0);
|
||||
if (grub_errno != GRUB_ERR_NONE)
|
||||
{
|
||||
grub_print_error ();
|
||||
|
@ -236,26 +262,6 @@ read_config_file (const char *config)
|
|||
continue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cur_cmd = (grub_command_list_t) grub_malloc (sizeof (*cur_cmd));
|
||||
if (! cur_cmd)
|
||||
goto fail;
|
||||
|
||||
cur_cmd->command = grub_strdup (cmdline);
|
||||
if (! cur_cmd->command)
|
||||
{
|
||||
grub_free (cur_cmd);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
cur_cmd->next = 0;
|
||||
|
||||
*next_cmd = cur_cmd;
|
||||
next_cmd = &(cur_cmd->next);
|
||||
|
||||
cur_entry->num++;
|
||||
}
|
||||
}
|
||||
|
||||
fail:
|
||||
|
@ -463,6 +469,9 @@ grub_normal_execute (const char *config, int nested)
|
|||
{
|
||||
grub_menu_t menu = 0;
|
||||
|
||||
read_command_list ();
|
||||
read_fs_list ();
|
||||
|
||||
if (config)
|
||||
{
|
||||
menu = read_config_file (config);
|
||||
|
@ -471,9 +480,6 @@ grub_normal_execute (const char *config, int nested)
|
|||
grub_errno = GRUB_ERR_NONE;
|
||||
}
|
||||
|
||||
read_command_list ();
|
||||
read_fs_list ();
|
||||
|
||||
if (menu)
|
||||
{
|
||||
grub_menu_run (menu, nested);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue