File grub2-cdpath.patch of Package grub2

From: Matthew Garrett <mjg@redhat.com>
Date: 2012-07-10 11:58:52 EDT
Subject: [PATCH] Add support for crappy cd craparino

References: fate#314485
Patch-Mainline: no

Signed-off-by: Michael Chang <mchang@suse.com>

Follow other code in this function and duplicate device path
before overwriting it.

Signed-off-by: Andrey Borzenkov <arvidjaar@gmail.com>

Index: grub-2.00/grub-core/disk/efi/efidisk.c
===================================================================
--- grub-2.00.orig/grub-core/disk/efi/efidisk.c
+++ grub-2.00/grub-core/disk/efi/efidisk.c
@@ -820,6 +820,31 @@ grub_efidisk_get_device_name (grub_efi_h
 
       return dev_name;
     }
+  else if (GRUB_EFI_DEVICE_PATH_TYPE (ldp) == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE &&
+      (GRUB_EFI_DEVICE_PATH_SUBTYPE (ldp) == GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE))
+    {
+      grub_efi_device_path_t *dup_dp, *dup_ldp;
+
+      /* It is necessary to duplicate the device path so that GRUB
+	   can overwrite it.  */
+      dup_dp = duplicate_device_path (dp);
+      if (! dup_dp)
+	    return 0;
+
+      dup_ldp = find_last_device_path (dup_dp);
+      dup_ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
+      dup_ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
+      dup_ldp->length[0] = 4;
+      dup_ldp->length[1] = 0;
+
+      if (!get_diskname_from_path (dup_dp, device_name))
+        {
+          grub_free (dup_dp);
+          return 0;
+        }
+      grub_free (dup_dp);
+      return grub_strdup (device_name);
+    }
   else
     {
       /* This should be an entire disk.  */
openSUSE Build Service is sponsored by