From ad1fe3f91fe565cbb22577d82a969aee350e9543 Mon Sep 17 00:00:00 2001 From: "sutre@tahoe" <> Date: Fri, 16 Aug 2013 19:41:33 +0200 Subject: [PATCH] Always fill bootdisk info and improve check for NetBSD disklabel. --- ChangeLog | 5 +++++ grub-core/loader/i386/bsd.c | 38 ++++++++++++++++++++++--------------- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index e73577cdb..c64faa28f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-08-16 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-08-16 Vladimir Serbinenko * conf/Makefile.extra-dist: Add util/bin2h.c. diff --git a/grub-core/loader/i386/bsd.c b/grub-core/loader/i386/bsd.c index 014b51c85..90877a365 100644 --- a/grub-core/loader/i386/bsd.c +++ b/grub-core/loader/i386/bsd.c @@ -1088,22 +1088,30 @@ grub_netbsd_add_boot_disk_and_wedge (void) 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)