File grub-0.97-eficd.patch of Package grub

--- grub-0.97/stage2/common.c	2009-03-02 14:00:46.000000000 -0500
+++ grub-0.97/stage2/common.c	2009-03-02 14:04:16.000000000 -0500
@@ -32,7 +32,7 @@
 struct multiboot_info mbi;
 unsigned long saved_drive;
 unsigned long saved_partition;
-unsigned long cdrom_drive;
+unsigned long cdrom_drive = 0x100;
 #ifndef STAGE1_5
 unsigned long saved_mem_upper;
 
--- grub-0.97/efi/efidisk.c	2009-03-02 14:00:46.000000000 -0500
+++ grub-0.97/efi/efidisk.c	2009-03-02 14:04:12.000000000 -0500
@@ -534,7 +534,7 @@
 					   unsigned long *drive,
 					   unsigned long *partition)
 {
-  grub_efi_device_path_t *dp;
+  grub_efi_device_path_t *dp, *dp1;
   struct grub_efidisk_data *d, *devices;
   int drv;
   unsigned long part;
@@ -562,6 +563,27 @@
   if (! dp)
     return 0;
 
+  dp1 = dp;
+  while (1)
+    {
+      grub_efi_uint8_t type = GRUB_EFI_DEVICE_PATH_TYPE (dp1);
+      grub_efi_uint8_t subtype = GRUB_EFI_DEVICE_PATH_SUBTYPE(dp1);
+
+      if (type == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE &&
+	      subtype == GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE)
+	{
+	  dp1->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
+	  dp1->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
+	  dp1->length[0] = 4;
+	  dp1->length[1] = 0;
+	}
+
+      if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp1))
+	break;
+
+      dp1 = GRUB_EFI_NEXT_DEVICE_PATH(dp1);
+    }
+
   drv = 0;
   for (d = fd_devices; d; d = d->next, drv++)
     {
openSUSE Build Service is sponsored by