read_fs_list (void)
{
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");
if (prefix)
file = grub_file_open (filename);
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)
{
char *buf;
read_command_list (void)
{
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");
if (prefix)
if (file)
{
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))
{
char *p, *name, *modname;
read_handler_list (void)
{
const char *prefix;
- static int first_time = 1;
const char *class_name;
auto int iterate_handler (grub_handler_t handler);
return 0;
}
- /* Make sure that this function does not get executed twice. */
- if (! first_time)
- return;
- first_time = 0;
-
prefix = grub_env_get ("prefix");
if (prefix)
{
if (file)
{
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))
{
char *p;
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
the command line interface if BATCH is false. */
void
{
grub_menu_t menu = 0;
- read_command_list ();
- read_fs_list ();
- read_handler_list ();
+ read_lists (NULL, NULL);
+ grub_register_variable_hook ("prefix", NULL, read_lists);
grub_command_execute ("parser.sh", 0, 0);
reader_nested = nested;