+2010-06-13 Grégoire Sutre <gregoire.sutre@gmail.com>
+
+ * kern/emu/hostdisk.c (grub_util_biosdisk_get_grub_dev): Use the
+ new partition naming style.
+ * util/grub-install.in: Adapt sed subtitutions in grub-probe calls.
+
2010-06-12 BVK Chaitanya <bvk.groups@gmail.com>
Add "-o grub.iso" like cmdline options support.
grub_disk_dev_unregister (&grub_util_biosdisk_dev);
}
+/*
+ * Note: we do not use the new partition naming scheme as dos_part does not
+ * necessarily correspond to an msdos partition. See e.g. the FreeBSD code
+ * in function grub_util_biosdisk_get_grub_dev.
+ */
static char *
make_device_name (int drive, int dos_part, int bsd_part)
{
For NetBSD, proceed as for Linux, except that the start sector is
obtained from the disk label. */
{
- char *name;
+ char *name, *partname;
grub_disk_t disk;
grub_disk_addr_t start;
- int dos_part = -1;
- int bsd_part = -1;
auto int find_partition (grub_disk_t dsk,
const grub_partition_t partition);
if (start == part_start)
{
- if (partition->parent)
- {
- dos_part = partition->parent->number;
- bsd_part = partition->number;
- }
- else
- {
- dos_part = partition->number;
- bsd_part = -1;
- }
-
+ partname = grub_partition_get_name (partition);
return 1;
}
if (! disk)
return 0;
+ partname = NULL;
grub_partition_iterate (disk, find_partition);
if (grub_errno != GRUB_ERR_NONE)
{
return 0;
}
- if (dos_part < 0)
+ if (partname == NULL)
{
grub_disk_close (disk);
grub_error (GRUB_ERR_BAD_DEVICE,
return 0;
}
- return make_device_name (drive, dos_part, bsd_part);
+ name = grub_xasprintf ("%s,%s", disk->name, partname);
+ free (partname);
+ return name;
}
#elif defined(__GNU__)
for (p = os_dev + 5; *p; ++p)
if (grub_isdigit(*p))
{
- p = strchr (p, 's');
+ p = strchr (p, 's'); /* msdos or apple (or ... ?) partition map */
if (p)
{
p++;
else
install_drive="`$grub_probe --target=drive --device ${install_device}`" || exit 1
fi
- install_drive="`echo ${install_drive} | sed -e s/,[0-9]*[a-z]*//g`"
+ install_drive="`echo ${install_drive} | sed -e s/,[a-z0-9,]*//g`"
fi
grub_drive="`$grub_probe --target=drive --device ${grub_device}`" || exit 1
# Strip partition number
- grub_drive="`echo ${grub_drive} | sed -e s/,[0-9]*[a-z]*//g`"
+ grub_drive="`echo ${grub_drive} | sed -e s/,[a-z0-9,]*//g`"
if [ "$disk_module" = ata ] ; then
# generic method (used on coreboot and ata mod)
uuid="`$grub_probe --target=fs_uuid --device ${grub_device}`"