28f7f8
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
606ea6
From: Paulo Flabiano Smorigo <pfsmorigo@br.ibm.com>
606ea6
Date: Wed, 19 Sep 2012 21:22:55 -0300
28f7f8
Subject: [PATCH] Add fw_path variable (revised)
606ea6
606ea6
This patch makes grub look for its config file on efi where the app was
606ea6
found. It was originally written by Matthew Garrett, and adapted to fix the
606ea6
"No modules are loaded on grub2 network boot" issue:
606ea6
606ea6
https://bugzilla.redhat.com/show_bug.cgi?id=857936
606ea6
---
606ea6
 grub-core/kern/main.c   | 13 ++++++-------
606ea6
 grub-core/normal/main.c | 25 ++++++++++++++++++++++++-
606ea6
 2 files changed, 30 insertions(+), 8 deletions(-)
606ea6
606ea6
diff --git a/grub-core/kern/main.c b/grub-core/kern/main.c
28f7f8
index 9cad0c4485c..8ab7794c47b 100644
606ea6
--- a/grub-core/kern/main.c
606ea6
+++ b/grub-core/kern/main.c
606ea6
@@ -127,16 +127,15 @@ grub_set_prefix_and_root (void)
606ea6
 
606ea6
   grub_machine_get_bootlocation (&fwdevice, &fwpath);
606ea6
 
606ea6
-  if (fwdevice)
606ea6
+  if (fwdevice && fwpath)
606ea6
     {
606ea6
-      char *cmdpath;
606ea6
+      char *fw_path;
606ea6
 
606ea6
-      cmdpath = grub_xasprintf ("(%s)%s", fwdevice, fwpath ? : "");
606ea6
-      if (cmdpath)
606ea6
+      fw_path = grub_xasprintf ("(%s)/%s", fwdevice, fwpath);
606ea6
+      if (fw_path)
606ea6
 	{
606ea6
-	  grub_env_set ("cmdpath", cmdpath);
606ea6
-	  grub_env_export ("cmdpath");
606ea6
-	  grub_free (cmdpath);
606ea6
+	  grub_env_set ("fw_path", fw_path);
606ea6
+	  grub_free (fw_path);
606ea6
 	}
606ea6
     }
606ea6
 
606ea6
diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c
28f7f8
index 3a926fc5fa9..6f4970f71c1 100644
606ea6
--- a/grub-core/normal/main.c
606ea6
+++ b/grub-core/normal/main.c
39700a
@@ -319,7 +319,30 @@ grub_cmd_normal (struct grub_command *cmd __attribute__ ((unused)),
606ea6
       /* Guess the config filename. It is necessary to make CONFIG static,
606ea6
 	 so that it won't get broken by longjmp.  */
606ea6
       char *config;
606ea6
-      const char *prefix;
606ea6
+      const char *prefix, *fw_path;
606ea6
+
606ea6
+      fw_path = grub_env_get ("fw_path");
606ea6
+      if (fw_path)
606ea6
+	{
606ea6
+	  config = grub_xasprintf ("%s/grub.cfg", fw_path);
606ea6
+	  if (config)
606ea6
+	    {
606ea6
+	      grub_file_t file;
606ea6
+
606ea6
+	      file = grub_file_open (config);
606ea6
+	      if (file)
606ea6
+		{
606ea6
+		  grub_file_close (file);
606ea6
+		  grub_enter_normal_mode (config);
606ea6
+		}
606ea6
+              else
606ea6
+                {
606ea6
+                  /*  Ignore all errors.  */
606ea6
+                  grub_errno = 0;
606ea6
+                }
606ea6
+	      grub_free (config);
606ea6
+	    }
606ea6
+	}
606ea6
 
606ea6
       prefix = grub_env_get ("prefix");
606ea6
       if (prefix)