23d2ea
From 622dd3cf5628440c92f4da46c40f39639d7e98e8 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
27a4da
Subject: [PATCH 090/260] 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
27a4da
index 9cad0c448..8ab7794c4 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
27a4da
index 3a926fc5f..6f4970f71 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)
606ea6
-- 
27a4da
2.13.0
606ea6