Support some annoying BSD and Minix subpartitions.
* Makefile.util.def (libgrub.a): Add grub-core/partmap/bsdlabel.c. * grub-core/disk/efi/efidisk.c (grub_efidisk_get_device_name): Properly handle concatenation. * grub-core/kern/device.c (grub_device_iterate): Likewise. * grub-core/normal/completion.c (iterate_partition): Likewise. * grub-core/kern/disk.c (grub_disk_open): Make disk->name not contain partition. All users updated. * grub-core/partmap/bsdlabel.c (grub_netbsdlabel_partition_map): New struct. (grub_openbsdlabel_partition_map): Likewise. (bsdlabel_partition_map_iterate): Rename to .. (iterate_real): ... this. New arguments sector, freebsd and pmap. (bsdlabel_partition_map_iterate): New function. (netopenbsdlabel_partition_map_iterate): Likewise. (netbsdlabel_partition_map_iterate): Likewise. (openbsdlabel_partition_map_iterate): Likewise. (GRUB_MOD_INIT): Register new partmaps. (GRUB_MOD_FINI): Unregister new partmaps. * grub-core/partmap/msdos.c (pc_partition_map_iterate): Rename to ... (grub_partition_msdos_iterate): ... this. All users updated. Don't support embedding other than in a minix partition. * include/grub/msdos_partition.h (grub_partition_msdos_iterate): New proto. * include/grub/partition.h (grub_partition): New field msdostype. * util/grub-install.in: Handle openbsd and netbsd types being in part_bsd module.
This commit is contained in:
commit
74342e312f
11 changed files with 225 additions and 57 deletions
|
@ -727,7 +727,7 @@ grub_efidisk_get_device_name (grub_efi_handle_t *handle)
|
|||
{
|
||||
/* This is a hard disk partition. */
|
||||
grub_disk_t parent = 0;
|
||||
char *partition_name = 0;
|
||||
const grub_partition_t tpart = NULL;
|
||||
char *device_name;
|
||||
grub_efi_device_path_t *dup_dp, *dup_ldp;
|
||||
grub_efi_hard_drive_device_path_t hd;
|
||||
|
@ -766,7 +766,7 @@ grub_efidisk_get_device_name (grub_efi_handle_t *handle)
|
|||
if (grub_partition_get_start (part) == hd.partition_start
|
||||
&& grub_partition_get_len (part) == hd.partition_size)
|
||||
{
|
||||
partition_name = grub_partition_get_name (part);
|
||||
tpart = part;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -795,14 +795,17 @@ grub_efidisk_get_device_name (grub_efi_handle_t *handle)
|
|||
grub_memcpy (&hd, ldp, sizeof (hd));
|
||||
grub_partition_iterate (parent, find_partition);
|
||||
|
||||
if (! partition_name)
|
||||
if (! tpart)
|
||||
{
|
||||
grub_disk_close (parent);
|
||||
return 0;
|
||||
}
|
||||
|
||||
device_name = grub_xasprintf ("%s,%s", parent->name, partition_name);
|
||||
grub_free (partition_name);
|
||||
{
|
||||
char *partition_name = grub_partition_get_name (tpart);
|
||||
device_name = grub_xasprintf ("%s,%s", parent->name, partition_name);
|
||||
grub_free (partition_name);
|
||||
}
|
||||
grub_disk_close (parent);
|
||||
|
||||
return device_name;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue