]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
always define config_directory and config_file as full pathname
authorAndrey Borzenkov <arvidjaar@gmail.com>
Tue, 10 Dec 2013 05:55:27 +0000 (09:55 +0400)
committerAndrey Borzenkov <arvidjaar@gmail.com>
Tue, 10 Dec 2013 05:55:27 +0000 (09:55 +0400)
If configfile is relative pathname, extend it with current ($root) so its
interpretation does not change if $root is changed later.

Suggested by Vladimir Serbienko.

grub-core/normal/main.c

index 991a5952428196f851c4c59e6904c2b7f06c1221..84df3601f76153fae96d9309b4ed14cffbe901c9 100644 (file)
@@ -190,14 +190,26 @@ read_config_file (const char *config)
   ctmp = grub_env_get ("config_directory");
   if (ctmp)
     old_dir = grub_strdup (ctmp);
-  grub_env_set ("config_file", config);
-  config_dir = grub_strdup (config);
+  if (*config == '(')
+    {
+      grub_env_set ("config_file", config);
+      config_dir = grub_strdup (config);
+    }
+  else
+    {
+      /* $root is guranteed to be defined, otherwise open above would fail */
+      config_dir = grub_xasprintf ("(%s)%s", grub_env_get ("root"), config);
+      if (config_dir)
+       grub_env_set ("config_file", config_dir);
+    }
   if (config_dir)
-    ptr = grub_strrchr (config_dir, '/');
-  if (ptr)
-    *ptr = 0;
-  grub_env_set ("config_directory", config_dir);
-  grub_free (config_dir);
+    {
+      ptr = grub_strrchr (config_dir, '/');
+      if (ptr)
+       *ptr = 0;
+      grub_env_set ("config_directory", config_dir);
+      grub_free (config_dir);
+    }
 
   grub_env_export ("config_file");
   grub_env_export ("config_directory");