2009-03-22 Yoshinori K. Okuji <okuji@enbug.org>
* normal/main.c (grub_normal_execute): Added an argument BATCH to specify if an interactive interface should be provided after reading a config file. All callers updated. (read_command_list): Prevent being executed twice. (read_fs_list): Likewise. * include/grub/normal.h (grub_normal_execute):
This commit is contained in:
parent
fbc00b0ca1
commit
f04f02e496
4 changed files with 47 additions and 19 deletions
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,14 @@
|
||||||
|
2009-03-22 Yoshinori K. Okuji <okuji@enbug.org>
|
||||||
|
|
||||||
|
* normal/main.c (grub_normal_execute): Added an argument
|
||||||
|
BATCH to specify if an interactive interface should be provided
|
||||||
|
after reading a config file.
|
||||||
|
All callers updated.
|
||||||
|
(read_command_list): Prevent being executed twice.
|
||||||
|
(read_fs_list): Likewise.
|
||||||
|
|
||||||
|
* include/grub/normal.h (grub_normal_execute):
|
||||||
|
|
||||||
2009-03-22 Pavel Roskin <proski@gno.org>
|
2009-03-22 Pavel Roskin <proski@gno.org>
|
||||||
|
|
||||||
* kern/powerpc/ieee1275/startup.S: Replace EXT_C(start) with
|
* kern/powerpc/ieee1275/startup.S: Replace EXT_C(start) with
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* configfile.c - command to manually load config file */
|
/* configfile.c - command to manually load config file */
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2005,2006,2007 Free Software Foundation, Inc.
|
* Copyright (C) 2005,2006,2007,2009 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -39,7 +39,7 @@ grub_cmd_source (grub_command_t cmd, int argc, char **args)
|
||||||
grub_env_context_open ();
|
grub_env_context_open ();
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_normal_execute (args[0], 1);
|
grub_normal_execute (args[0], 1, ! new_env);
|
||||||
|
|
||||||
if (new_env)
|
if (new_env)
|
||||||
grub_env_context_close ();
|
grub_env_context_close ();
|
||||||
|
|
|
@ -75,7 +75,7 @@ typedef struct grub_menu_execute_callback
|
||||||
*grub_menu_execute_callback_t;
|
*grub_menu_execute_callback_t;
|
||||||
|
|
||||||
void grub_enter_normal_mode (const char *config);
|
void grub_enter_normal_mode (const char *config);
|
||||||
void grub_normal_execute (const char *config, int nested);
|
void grub_normal_execute (const char *config, int nested, int batch);
|
||||||
void grub_menu_execute_with_fallback (grub_menu_t menu,
|
void grub_menu_execute_with_fallback (grub_menu_t menu,
|
||||||
grub_menu_entry_t entry,
|
grub_menu_entry_t entry,
|
||||||
grub_menu_execute_callback_t callback,
|
grub_menu_execute_callback_t callback,
|
||||||
|
|
|
@ -164,8 +164,8 @@ free_menu_entry_classes (struct grub_menu_entry_class *head)
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_err_t
|
grub_err_t
|
||||||
grub_normal_menu_addentry (int argc, const char **args, struct grub_script *script,
|
grub_normal_menu_addentry (int argc, const char **args,
|
||||||
const char *sourcecode)
|
struct grub_script *script, const char *sourcecode)
|
||||||
{
|
{
|
||||||
const char *menutitle = 0;
|
const char *menutitle = 0;
|
||||||
const char *menusourcecode;
|
const char *menusourcecode;
|
||||||
|
@ -184,7 +184,7 @@ grub_normal_menu_addentry (int argc, const char **args, struct grub_script *scri
|
||||||
classes_head->next = 0;
|
classes_head->next = 0;
|
||||||
classes_tail = classes_head;
|
classes_tail = classes_head;
|
||||||
|
|
||||||
menu = grub_env_get_data_slot("menu");
|
menu = grub_env_get_data_slot ("menu");
|
||||||
if (! menu)
|
if (! menu)
|
||||||
return grub_error (GRUB_ERR_MENU, "no menu context");
|
return grub_error (GRUB_ERR_MENU, "no menu context");
|
||||||
|
|
||||||
|
@ -236,7 +236,8 @@ grub_normal_menu_addentry (int argc, const char **args, struct grub_script *scri
|
||||||
{
|
{
|
||||||
/* Handle invalid argument. */
|
/* Handle invalid argument. */
|
||||||
failed = 1;
|
failed = 1;
|
||||||
grub_error (GRUB_ERR_MENU, "invalid argument for menuentry: %s", args[i]);
|
grub_error (GRUB_ERR_MENU,
|
||||||
|
"invalid argument for menuentry: %s", args[i]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -249,7 +250,8 @@ grub_normal_menu_addentry (int argc, const char **args, struct grub_script *scri
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
failed = 1;
|
failed = 1;
|
||||||
grub_error (GRUB_ERR_MENU, "too many titles for menuentry: %s", args[i]);
|
grub_error (GRUB_ERR_MENU,
|
||||||
|
"too many titles for menuentry: %s", args[i]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -382,7 +384,7 @@ void
|
||||||
grub_enter_normal_mode (const char *config)
|
grub_enter_normal_mode (const char *config)
|
||||||
{
|
{
|
||||||
if (grub_setjmp (grub_exit_env) == 0)
|
if (grub_setjmp (grub_exit_env) == 0)
|
||||||
grub_normal_execute (config, 0);
|
grub_normal_execute (config, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize the screen. */
|
/* Initialize the screen. */
|
||||||
|
@ -445,7 +447,13 @@ static void
|
||||||
read_command_list (void)
|
read_command_list (void)
|
||||||
{
|
{
|
||||||
const char *prefix;
|
const char *prefix;
|
||||||
|
static int first_time = 1;
|
||||||
|
|
||||||
|
/* Make sure that this function does not get executed twice. */
|
||||||
|
if (! first_time)
|
||||||
|
return;
|
||||||
|
first_time = 0;
|
||||||
|
|
||||||
prefix = grub_env_get ("prefix");
|
prefix = grub_env_get ("prefix");
|
||||||
if (prefix)
|
if (prefix)
|
||||||
{
|
{
|
||||||
|
@ -558,6 +566,12 @@ static void
|
||||||
read_fs_list (void)
|
read_fs_list (void)
|
||||||
{
|
{
|
||||||
const char *prefix;
|
const char *prefix;
|
||||||
|
static int first_time = 1;
|
||||||
|
|
||||||
|
/* Make sure that this function does not get executed twice. */
|
||||||
|
if (! first_time)
|
||||||
|
return;
|
||||||
|
first_time = 0;
|
||||||
|
|
||||||
prefix = grub_env_get ("prefix");
|
prefix = grub_env_get ("prefix");
|
||||||
if (prefix)
|
if (prefix)
|
||||||
|
@ -627,10 +641,10 @@ read_fs_list (void)
|
||||||
grub_fs_autoload_hook = autoload_fs_module;
|
grub_fs_autoload_hook = autoload_fs_module;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Read the config file CONFIG and execute the menu interface or
|
/* Read the config file COFIG, and execute the menu interface or
|
||||||
the command-line interface. */
|
the command-line interface if BATCH is false. */
|
||||||
void
|
void
|
||||||
grub_normal_execute (const char *config, int nested)
|
grub_normal_execute (const char *config, int nested, int batch)
|
||||||
{
|
{
|
||||||
grub_menu_t menu = 0;
|
grub_menu_t menu = 0;
|
||||||
|
|
||||||
|
@ -645,14 +659,17 @@ grub_normal_execute (const char *config, int nested)
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (menu && menu->size)
|
if (! batch)
|
||||||
{
|
{
|
||||||
grub_menu_viewer_show_menu (menu, nested);
|
if (menu && menu->size)
|
||||||
if (nested)
|
{
|
||||||
free_menu (menu);
|
grub_menu_viewer_show_menu (menu, nested);
|
||||||
|
if (nested)
|
||||||
|
free_menu (menu);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
grub_cmdline_run (nested);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
grub_cmdline_run (nested);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
|
|
Loading…
Reference in a new issue