]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/disk/efi/efidisk.c (name_devices): Don't make disks
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Thu, 7 Jun 2012 19:55:55 +0000 (21:55 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Thu, 7 Jun 2012 19:55:55 +0000 (21:55 +0200)
out of partitions containing other partitions.

ChangeLog
grub-core/disk/efi/efidisk.c

index 3d47ebf578b8e85fdca39b455ee5f70491414fb0..f1091ba9fc43530c75177beb82767135bdcbf1f4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2012-06-07  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/disk/efi/efidisk.c (name_devices): Don't make disks
+       out of partitions containing other partitions.
+
 2012-06-07  Vladimir Serbinenko  <phcoder@gmail.com>
 
        Pass PCIINFO on BIOS to OpenBSD since otherwise it fails to boot
index 779f2a624292cd4dcd60ccf847780e9c0e4c834c..883385abab41f19003dfd523def1005a40e3840e 100644 (file)
@@ -271,31 +271,47 @@ name_devices (struct grub_efidisk_data *devices)
              /* Fall through by intention.  */
            case GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE:
              {
-               struct grub_efidisk_data *parent;
+               struct grub_efidisk_data *parent, *parent2;
 
                parent = find_parent_device (devices, d);
-               if (parent)
+               if (!parent)
                  {
-                   if (is_hard_drive)
-                     {
 #if 0
-                       grub_printf ("adding a hard drive by a partition: ");
-                       grub_print_device_path (parent->device_path);
+                   grub_printf ("skipping orphaned partition: ");
+                   grub_efi_print_device_path (parent->device_path);
 #endif
-                       add_device (&hd_devices, parent);
-                     }
-                   else
-                     {
+                   break;
+                 }
+               parent2 = find_parent_device (devices, parent);
+               if (parent2)
+                 {
 #if 0
-                       grub_printf ("adding a cdrom by a partition: ");
-                       grub_print_device_path (parent->device_path);
+                   grub_printf ("skipping subpartition: ");
+                   grub_efi_print_device_path (parent->device_path);
 #endif
-                       add_device (&cd_devices, parent);
-                     }
-
-                   /* Mark the parent as used.  */
-                   parent->last_device_path = 0;
+                   /* Mark itself as used.  */
+                   d->last_device_path = 0;
+                   break;
+                 }
+               if (is_hard_drive)
+                 {
+#if 0
+                   grub_printf ("adding a hard drive by a partition: ");
+                   grub_efi_print_device_path (parent->device_path);
+#endif
+                   add_device (&hd_devices, parent);
+                 }
+               else
+                 {
+#if 0
+                   grub_printf ("adding a cdrom by a partition: ");
+                   grub_efi_print_device_path (parent->device_path);
+#endif
+                   add_device (&cd_devices, parent);
                  }
+
+               /* Mark the parent as used.  */
+               parent->last_device_path = 0;
              }
              /* Mark itself as used.  */
              d->last_device_path = 0;
@@ -325,7 +341,7 @@ name_devices (struct grub_efidisk_data *devices)
             is a floppy drive.  */
 #if 0
          grub_printf ("adding a floppy by guessing: ");
-         grub_print_device_path (d->device_path);
+         grub_efi_print_device_path (d->device_path);
 #endif
          add_device (&fd_devices, d);
        }
@@ -335,7 +351,7 @@ name_devices (struct grub_efidisk_data *devices)
             CDROM drive.  */
 #if 0
          grub_printf ("adding a cdrom by guessing: ");
-         grub_print_device_path (d->device_path);
+         grub_efi_print_device_path (d->device_path);
 #endif
          add_device (&cd_devices, d);
        }
@@ -344,7 +360,7 @@ name_devices (struct grub_efidisk_data *devices)
          /* The default is a hard drive.  */
 #if 0
          grub_printf ("adding a hard drive by guessing: ");
-         grub_print_device_path (d->device_path);
+         grub_efi_print_device_path (d->device_path);
 #endif
          add_device (&hd_devices, d);
        }