]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/normal/main.c (read_config_file): Provide config_file and
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 27 May 2012 13:34:41 +0000 (15:34 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 27 May 2012 13:34:41 +0000 (15:34 +0200)
config_directory.
* util/grub.d/41_custom.in: Use config_directoy when available.

ChangeLog
grub-core/normal/main.c
util/grub.d/41_custom.in

index 59d00a8656d0c2b3c0e3f342c139ba65f1ab35cf..6c6c7a341c286aef0427eed23e6a594bfdd94fb5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2012-05-27  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/normal/main.c (read_config_file): Provide config_file and
+       config_directory.
+       * util/grub.d/41_custom.in: Use config_directoy when available.
+
 2012-05-27  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/fs/bfs.c (iterate_in_b_tree): Add missing NESTED_FUNC_ATTR.
index 1963fe485500f9f3de591b958a127e21bc40e6b3..feeb1ef136b6d87464a277a5a65c4132d845f533 100644 (file)
@@ -138,6 +138,8 @@ static grub_menu_t
 read_config_file (const char *config)
 {
   grub_file_t file;
+  const char *old_file, *old_dir;
+  char *config_dir, *ptr = 0;
 
   auto grub_err_t getline (char **line, int cont);
   grub_err_t getline (char **line, int cont __attribute__ ((unused)))
@@ -176,6 +178,19 @@ read_config_file (const char *config)
   if (! file)
     return 0;
 
+  old_file = grub_env_get ("config_file");
+  old_dir = grub_env_get ("config_directory");
+  grub_env_set ("config_file", config);
+  config_dir = grub_strdup (config);
+  if (config_dir)
+    ptr = grub_strrchr (config_dir, '/');
+  if (ptr)
+    *ptr = 0;
+  grub_env_set ("config_directory", config_dir);
+
+  grub_env_export ("config_file");
+  grub_env_export ("config_directory");
+
   while (1)
     {
       char *line;
@@ -191,6 +206,15 @@ read_config_file (const char *config)
       grub_free (line);
     }
 
+  if (old_file)
+    grub_env_set ("config_file", old_file);
+  else
+    grub_env_unset ("config_file");
+  if (old_dir)
+    grub_env_set ("config_directory", old_dir);
+  else
+    grub_env_unset ("config_directory");
+
   grub_file_close (file);
 
   return newmenu;
index 64d691c55213fac4630d4d7f1f3cf0917eea375b..fcc21a987e10e1efbe530c066257b7c67249f533 100644 (file)
@@ -1,6 +1,8 @@
 #!/bin/sh
 cat <<EOF
-if [ -f  \$prefix/custom.cfg ]; then
+if [ -f  \${config_directory}/custom.cfg ]; then
+  source \${config_directory}/custom.cfg
+elif [ -z "\${config_directory}" -a -f  \$prefix/custom.cfg ]; then
   source \$prefix/custom.cfg;
 fi
 EOF