[parted-devel] [PATCH 1/4] libparted: Add legacy_boot flag to GPT PMBR (#754850)
Jim Meyering
jim at meyering.net
Thu Feb 2 11:17:26 UTC 2012
bcl at redhat.com wrote:
> From: Matthew Garrett <mjg at redhat.com>
>
> Some BIOS systems will only boot from GPT partitions if the boot flag is
> set on the protective MBR partition. This adds the ability to set this
> flag using the disk_set and disk_toggle commands.
>
> * include/parted/disk.h (_PedDiskFlag): Add PED_DISK_LEGACY_BOOT
> * libparted/disk.c (ped_disk_flag_get_name): Add PED_DISK_LEGACY_BOOT
> * libparted/labels/gpt.c (_GPTDiskData): Add legacy_boot flag.
> (gpt_alloc): Init legacy_boot to 0.
> (gpt_read_headers): Set legacy_boot state from PMBR boot flag.
> (_write_pmbr): Add legacy_boot flag and set PMBR boot flag from it.
> (gpt_write): Pass legacy_boot flag through to _write_pmbr
> (gpt_disk_set_flag): New function
> (gpt_disk_is_flag_available): New function
> (gpt_disk_get_flag): New function
> (gpt_disk_ops): Add disk_set_flag, disk_get_flag, disk_is_flag_available
> * parted/parted.c (do_disk_set): New function
> (do_disk_toggle): New function
> (_init_commands): Add do_disk_set and do_disk_toggle
> * parted/ui.c (command_line_get_disk_flag): New function
> * parted/ui.h: Add command_line_get_disk_flag prototype.
Thanks to you and Matthew for the patch.
The new names are a little too generic -- i.e., what if some other
legacy boot flag needs support in a different partition table type?
So I've renamed the cpp symbols like this:
git grep -l LEGACY_BOOT|xargs perl -pi -e 's/_LEGACY_BOOT/_GPT_PMBR_BOOT/g'
and manually changed the "legacy_boot" command argument to "pmbr_boot".
I'll squash this into your 1/4 commit and update the log above.
diff --git a/include/parted/disk.in.h b/include/parted/disk.in.h
index 4ae1a7d..d42bc07 100644
--- a/include/parted/disk.in.h
+++ b/include/parted/disk.in.h
@@ -37,10 +37,10 @@ enum _PedDiskFlag {
it only controls the aligning of the end of the partition) */
PED_DISK_CYLINDER_ALIGNMENT=1,
/* This flag controls whether the boot flag of a GPT PMBR is set */
- PED_DISK_LEGACY_BOOT=2,
+ PED_DISK_GPT_PMBR_BOOT=2,
};
#define PED_DISK_FIRST_FLAG PED_DISK_CYLINDER_ALIGNMENT
-#define PED_DISK_LAST_FLAG PED_DISK_LEGACY_BOOT
+#define PED_DISK_LAST_FLAG PED_DISK_GPT_PMBR_BOOT
/**
* Partition types
@@ -72,10 +72,10 @@ enum _PedPartitionFlag {
PED_PARTITION_BIOS_GRUB=12,
PED_PARTITION_APPLE_TV_RECOVERY=13,
PED_PARTITION_DIAG=14,
- PED_PARTITION_LEGACY_BOOT=15
+ PED_PARTITION_GPT_PMBR_BOOT=15
};
#define PED_PARTITION_FIRST_FLAG PED_PARTITION_BOOT
-#define PED_PARTITION_LAST_FLAG PED_PARTITION_LEGACY_BOOT
+#define PED_PARTITION_LAST_FLAG PED_PARTITION_GPT_PMBR_BOOT
enum _PedDiskTypeFeature {
PED_DISK_TYPE_EXTENDED=1, /**< supports extended partitions */
diff --git a/libparted/disk.c b/libparted/disk.c
index 7fcf9c9..8684a02 100644
--- a/libparted/disk.c
+++ b/libparted/disk.c
@@ -836,8 +836,8 @@ ped_disk_flag_get_name(PedDiskFlag flag)
switch (flag) {
case PED_DISK_CYLINDER_ALIGNMENT:
return N_("cylinder_alignment");
- case PED_DISK_LEGACY_BOOT:
- return N_("legacy_boot");
+ case PED_DISK_GPT_PMBR_BOOT:
+ return N_("pmbr_boot");
default:
ped_exception_throw (
PED_EXCEPTION_BUG,
@@ -2437,8 +2437,8 @@ ped_partition_flag_get_name (PedPartitionFlag flag)
return N_("atvrecv");
case PED_PARTITION_DIAG:
return N_("diag");
- case PED_PARTITION_LEGACY_BOOT:
- return N_("legacy_boot");
+ case PED_PARTITION_GPT_PMBR_BOOT:
+ return N_("pmbr_boot");
default:
ped_exception_throw (
diff --git a/libparted/labels/gpt.c b/libparted/labels/gpt.c
index 33cbf67..6972943 100644
--- a/libparted/labels/gpt.c
+++ b/libparted/labels/gpt.c
@@ -1527,7 +1527,7 @@ gpt_disk_set_flag (PedDisk *disk, PedDiskFlag flag, int state)
GPTDiskData *gpt_disk_data = disk->disk_specific;
switch (flag)
{
- case PED_DISK_LEGACY_BOOT:
+ case PED_DISK_GPT_PMBR_BOOT:
gpt_disk_data->legacy_boot = state;
return 1;
default:
@@ -1540,7 +1540,7 @@ gpt_disk_is_flag_available(const PedDisk *disk, PedDiskFlag flag)
{
switch (flag)
{
- case PED_DISK_LEGACY_BOOT:
+ case PED_DISK_GPT_PMBR_BOOT:
return 1;
default:
return 0;
@@ -1553,7 +1553,7 @@ gpt_disk_get_flag (const PedDisk *disk, PedDiskFlag flag)
GPTDiskData *gpt_disk_data = disk->disk_specific;
switch (flag)
{
- case PED_DISK_LEGACY_BOOT:
+ case PED_DISK_GPT_PMBR_BOOT:
return gpt_disk_data->legacy_boot;
break;
default:
@@ -1662,7 +1662,7 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state)
case PED_PARTITION_HIDDEN:
gpt_part_data->hidden = state;
return 1;
- case PED_PARTITION_LEGACY_BOOT:
+ case PED_PARTITION_GPT_PMBR_BOOT:
gpt_part_data->legacy_boot = state;
return 1;
case PED_PARTITION_SWAP:
@@ -1701,7 +1701,7 @@ gpt_partition_get_flag (const PedPartition *part, PedPartitionFlag flag)
return gpt_part_data->atvrecv;
case PED_PARTITION_HIDDEN:
return gpt_part_data->hidden;
- case PED_PARTITION_LEGACY_BOOT:
+ case PED_PARTITION_GPT_PMBR_BOOT:
return gpt_part_data->legacy_boot;
case PED_PARTITION_SWAP:
case PED_PARTITION_LBA:
@@ -1727,7 +1727,7 @@ gpt_partition_is_flag_available (const PedPartition *part,
case PED_PARTITION_DIAG:
case PED_PARTITION_APPLE_TV_RECOVERY:
case PED_PARTITION_HIDDEN:
- case PED_PARTITION_LEGACY_BOOT:
+ case PED_PARTITION_GPT_PMBR_BOOT:
return 1;
case PED_PARTITION_SWAP:
case PED_PARTITION_ROOT:
More information about the parted-devel
mailing list