=== modified file 'ChangeLog' --- ChangeLog 2013-07-18 15:59:14 +0000 +++ ChangeLog 2013-07-19 22:51:04 +0000 @@ -1,3 +1,8 @@ +2013-07-20 Grégoire Sutre + + * grub-core/loader/i386/bsd.c (grub_netbsd_add_boot_disk_and_wedge): + Always fill bootdisk info and improve check for NetBSD disklabel. + 2013-07-18 Leif Lindholm 2013-07-18 Francesco Lavra 2013-07-18 Vladimir Serbinenko === modified file 'grub-core/loader/i386/bsd.c' --- grub-core/loader/i386/bsd.c 2013-04-28 13:18:50 +0000 +++ grub-core/loader/i386/bsd.c 2013-07-19 22:44:12 +0000 @@ -1088,22 +1088,30 @@ grub_netbsd_add_boot_disk_and_wedge (voi grub_bsd_add_meta (NETBSD_BTINFO_BOOTWEDGE, &biw, sizeof (biw)); } - /* Fill bootdisk if this a NetBSD disk label. */ - if (part->partmap != NULL && - (grub_strcmp (part->partmap->name, "netbsd") == 0) && - buf.label.magic == grub_cpu_to_le32 (GRUB_PC_PARTITION_BSD_LABEL_MAGIC)) - { - struct grub_netbsd_btinfo_bootdisk bid; + /* Fill bootdisk. */ + { + struct grub_netbsd_btinfo_bootdisk bid; - grub_memset (&bid, 0, sizeof (bid)); - bid.labelsector = partmapsector; - bid.label.type = buf.label.type; - bid.label.checksum = buf.label.checksum; - memcpy (bid.label.packname, buf.label.packname, 16); - bid.biosdev = biosdev; - bid.partition = part->number; - grub_bsd_add_meta (NETBSD_BTINFO_BOOTDISK, &bid, sizeof (bid)); - } + grub_memset (&bid, 0, sizeof (bid)); + /* Check for a NetBSD disk label. */ + if (part->partmap != NULL && + (grub_strcmp (part->partmap->name, "netbsd") == 0 || + (part->parent == NULL && grub_strcmp (part->partmap->name, "bsd") == 0))) + { + bid.labelsector = partmapsector; + bid.label.type = buf.label.type; + bid.label.checksum = buf.label.checksum; + memcpy (bid.label.packname, buf.label.packname, 16); + } + else + { + bid.labelsector = -1; + } + bid.biosdev = biosdev; + bid.partition = part->number; + + grub_bsd_add_meta (NETBSD_BTINFO_BOOTDISK, &bid, sizeof (bid)); + } fail: if (dev)