]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Change grub_install_register_efi interface to pass GRUB device.
authorVladimir Serbinenko <phcoder@gmail.com>
Sat, 14 Dec 2013 22:31:56 +0000 (23:31 +0100)
committerVladimir Serbinenko <phcoder@gmail.com>
Sat, 14 Dec 2013 22:31:56 +0000 (23:31 +0100)
This allows grub_install_register_efi to request partition info
directly.

ChangeLog
grub-core/osdep/basic/no_platform.c
grub-core/osdep/unix/platform.c
include/grub/util/install.h
util/grub-install.c

index 4cfed4835fe31d4411527092ffdd949dddba8539..a7f84666b76757c66a6edef3b6dd103c6c62e13a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2013-12-14  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       Change grub_install_register_efi interface to pass GRUB device.
+
+       This allows grub_install_register_efi to request partition info
+       directly.
+
 2013-12-14  Vladimir Serbinenko  <phcoder@gmail.com>
 
        Workaround cygwin bug when using \\?\Volume{GUID} syntax.
index 32be5e8e38dc03a084505dd64869bb1b6cd541b4..ab7652a7fe77c62326485aa3fe6ed4421524b672 100644 (file)
@@ -31,7 +31,7 @@ grub_install_register_ieee1275 (int is_prep, const char *install_device,
 }
 
 void
-grub_install_register_efi (const char *efidir_disk, int efidir_part,
+grub_install_register_efi (grub_device_t efidir_grub_dev,
                           const char *efifile_path,
                           const char *efi_distributor)
 {
index dc296c98b75af23181c41c0bc637317c64bcb0f3..b2ec6bd8d0f89eeb52897988518aaab10b2b7427 100644 (file)
@@ -19,6 +19,7 @@
 #include <config.h>
 
 #include <grub/util/install.h>
+#include <grub/emu/hostdisk.h>
 #include <grub/util/misc.h>
 #include <grub/misc.h>
 #include <grub/i18n.h>
@@ -129,10 +130,15 @@ grub_install_remove_efi_entries_by_distributor (const char *efi_distributor)
 }
 
 void
-grub_install_register_efi (const char *efidir_disk, int efidir_part,
+grub_install_register_efi (grub_device_t efidir_grub_dev,
                           const char *efifile_path,
                           const char *efi_distributor)
 {
+  const char * efidir_disk;
+  int efidir_part;
+  efidir_disk = grub_util_biosdisk_get_osdev (efidir_grub_dev->disk);
+  efidir_part = efidir_grub_dev->disk->partition ? efidir_grub_dev->disk->partition->number + 1 : 1;
+
   if (grub_util_exec_redirect_null ((const char * []){ "efibootmgr", "--version", NULL }))
     {
       /* TRANSLATORS: This message is shown when required executable `%s'
index 20626d4e686a7db09d0b1b0478942911964f7589..a647af4ad756f455f4c5271cd5413e68e6e562e9 100644 (file)
@@ -205,7 +205,7 @@ const char *
 grub_install_get_default_x86_platform (void);
 
 void
-grub_install_register_efi (const char *efidir_disk, int efidir_part,
+grub_install_register_efi (grub_device_t efidir_grub_dev,
                           const char *efifile_path,
                           const char *efi_distributor);
 
index 5d22f902e097077416fc18bd98dd2eaaf2accdf7..0fbf052b8913e8fd736d42ab8f0945d7924ff455 100644 (file)
@@ -1559,19 +1559,25 @@ main (int argc, char *argv[])
       }
       if (!removable && update_nvram)
        {
-         char * efidir_disk;
-         int efidir_part;
          char * efifile_path;
+         char * part;
 
          /* Try to make this image bootable using the EFI Boot Manager, if available.  */
          if (!efi_distributor || efi_distributor[0] == '\0')
            grub_util_error ("%s", "EFI distributor id isn't specified.");
-         efidir_disk  = grub_util_get_os_disk (efidir_device_names[0]);
-         efidir_part = efidir_grub_dev->disk->partition ? efidir_grub_dev->disk->partition->number + 1 : 1;
          efifile_path = xasprintf ("\\EFI\\%s\\%s",
                                    efi_distributor,
                                    efi_file);
-         grub_install_register_efi (efidir_disk, efidir_part,
+         part = (efidir_grub_dev->disk->partition
+                 ? grub_partition_get_name (efidir_grub_dev->disk->partition)
+                 : 0);
+         grub_util_info ("Registering with EFI: distributor = `%s',"
+                         " path = `%s', ESP at %s%s%s",
+                         efi_distributor, efifile_path,
+                         efidir_grub_dev->disk->name,
+                         (part ? ",": ""), (part ? : ""));
+         grub_free (part);
+         grub_install_register_efi (efidir_grub_dev,
                                     efifile_path, efi_distributor);
        }
       break;