Blame SOURCES/0002-Add-fw_path-variable-revised.patch

606ea6
From 6759845abe79871a4241041915b56f617679e0b5 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
606ea6
Subject: [PATCH 02/34] 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
606ea6
index 9cad0c4..8ab7794 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
606ea6
index c36663f..243b9d6 100644
606ea6
--- a/grub-core/normal/main.c
606ea6
+++ b/grub-core/normal/main.c
606ea6
@@ -311,7 +311,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
-- 
606ea6
1.8.4.2
606ea6