Fix *.lst handling after ${prefix} redefinition.
This commit is contained in:
parent
34f4a5b005
commit
e880248e79
4 changed files with 41 additions and 21 deletions
|
@ -51,12 +51,6 @@ 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)
|
||||||
|
@ -72,6 +66,15 @@ read_fs_list (void)
|
||||||
file = grub_file_open (filename);
|
file = grub_file_open (filename);
|
||||||
if (file)
|
if (file)
|
||||||
{
|
{
|
||||||
|
/* Override previous fs.lst. */
|
||||||
|
while (fs_module_list)
|
||||||
|
{
|
||||||
|
grub_named_list_t tmp;
|
||||||
|
tmp = fs_module_list->next;
|
||||||
|
grub_free (fs_module_list);
|
||||||
|
fs_module_list = tmp;
|
||||||
|
}
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
char *buf;
|
char *buf;
|
||||||
|
|
|
@ -62,12 +62,6 @@ 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)
|
||||||
|
@ -84,6 +78,16 @@ read_command_list (void)
|
||||||
if (file)
|
if (file)
|
||||||
{
|
{
|
||||||
char *buf = NULL;
|
char *buf = NULL;
|
||||||
|
|
||||||
|
/* Override previous commands.lst. */
|
||||||
|
while (grub_command_list)
|
||||||
|
{
|
||||||
|
grub_command_t tmp;
|
||||||
|
tmp = grub_command_list->next;
|
||||||
|
grub_free (grub_command_list);
|
||||||
|
grub_command_list = tmp;
|
||||||
|
}
|
||||||
|
|
||||||
for (;; grub_free (buf))
|
for (;; grub_free (buf))
|
||||||
{
|
{
|
||||||
char *p, *name, *modname;
|
char *p, *name, *modname;
|
||||||
|
|
|
@ -135,7 +135,6 @@ void
|
||||||
read_handler_list (void)
|
read_handler_list (void)
|
||||||
{
|
{
|
||||||
const char *prefix;
|
const char *prefix;
|
||||||
static int first_time = 1;
|
|
||||||
const char *class_name;
|
const char *class_name;
|
||||||
|
|
||||||
auto int iterate_handler (grub_handler_t handler);
|
auto int iterate_handler (grub_handler_t handler);
|
||||||
|
@ -162,11 +161,6 @@ read_handler_list (void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 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)
|
||||||
{
|
{
|
||||||
|
@ -182,6 +176,16 @@ read_handler_list (void)
|
||||||
if (file)
|
if (file)
|
||||||
{
|
{
|
||||||
char *buf = NULL;
|
char *buf = NULL;
|
||||||
|
|
||||||
|
/* Override previous handler.lst. */
|
||||||
|
while (grub_handler_class_list)
|
||||||
|
{
|
||||||
|
grub_handler_class_t tmp;
|
||||||
|
tmp = grub_handler_class_list->next;
|
||||||
|
grub_free (grub_handler_class_list);
|
||||||
|
grub_handler_class_list = tmp;
|
||||||
|
}
|
||||||
|
|
||||||
for (;; grub_free (buf))
|
for (;; grub_free (buf))
|
||||||
{
|
{
|
||||||
char *p;
|
char *p;
|
||||||
|
|
|
@ -404,6 +404,16 @@ grub_normal_init_page (void)
|
||||||
|
|
||||||
static int reader_nested;
|
static int reader_nested;
|
||||||
|
|
||||||
|
static char *
|
||||||
|
read_lists (struct grub_env_var *var __attribute__ ((unused)),
|
||||||
|
const char *val)
|
||||||
|
{
|
||||||
|
read_command_list ();
|
||||||
|
read_fs_list ();
|
||||||
|
read_handler_list ();
|
||||||
|
return val ? grub_strdup (val) : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* Read the config file CONFIG and execute the menu interface or
|
/* Read the config file CONFIG and execute the menu interface or
|
||||||
the command line interface if BATCH is false. */
|
the command line interface if BATCH is false. */
|
||||||
void
|
void
|
||||||
|
@ -411,9 +421,8 @@ grub_normal_execute (const char *config, int nested, int batch)
|
||||||
{
|
{
|
||||||
grub_menu_t menu = 0;
|
grub_menu_t menu = 0;
|
||||||
|
|
||||||
read_command_list ();
|
read_lists (NULL, NULL);
|
||||||
read_fs_list ();
|
grub_register_variable_hook ("prefix", NULL, read_lists);
|
||||||
read_handler_list ();
|
|
||||||
grub_command_execute ("parser.sh", 0, 0);
|
grub_command_execute ("parser.sh", 0, 0);
|
||||||
|
|
||||||
reader_nested = nested;
|
reader_nested = nested;
|
||||||
|
|
Loading…
Reference in a new issue