From: Carlo Caione <ca...@endlessm.com> Sometimes we are interested in checking whether an msdos partition has the boot flag set. Introduce a new parameter to the probe command to check this.
Signed-off-by: Carlo Caione <ca...@endlessm.com> --- grub-core/commands/probe.c | 18 ++++++++++++++++++ grub-core/partmap/msdos.c | 1 + include/grub/partition.h | 3 +++ 3 files changed, 22 insertions(+) diff --git a/grub-core/commands/probe.c b/grub-core/commands/probe.c index cf2793e1d..22d1c5660 100644 --- a/grub-core/commands/probe.c +++ b/grub-core/commands/probe.c @@ -31,6 +31,7 @@ #include <grub/env.h> #include <grub/extcmd.h> #include <grub/i18n.h> +#include <grub/msdos_partition.h> GRUB_MOD_LICENSE ("GPLv3+"); @@ -45,6 +46,7 @@ static const struct grub_arg_option options[] = {"fs", 'f', 0, N_("Determine filesystem type."), 0, 0}, {"fs-uuid", 'u', 0, N_("Determine filesystem UUID."), 0, 0}, {"label", 'l', 0, N_("Determine filesystem label."), 0, 0}, + {"bootable", 'b', 0, N_("Determine if bootable / active flag is set."), 0, 0}, {0, 0, 0, 0, 0, 0} }; @@ -154,6 +156,22 @@ grub_cmd_probe (grub_extcmd_context_t ctxt, int argc, char **args) grub_device_close (dev); return GRUB_ERR_NONE; } + if (state[6].set) + { + const char *val = "none"; + if (dev->disk && + dev->disk->partition && + dev->disk->partition->msdostype != GRUB_PC_PARTITION_TYPE_GPT_DISK && + grub_strcmp (dev->disk->partition->partmap->name, "msdos") == 0) + if (dev->disk->partition->flag & 0x80) + val = "bootable"; + if (state[0].set) + grub_env_set (state[0].arg, val); + else + grub_printf ("%s", val); + grub_device_close (dev); + return GRUB_ERR_NONE; + } grub_device_close (dev); return grub_error (GRUB_ERR_BAD_ARGUMENT, "unrecognised target"); } diff --git a/grub-core/partmap/msdos.c b/grub-core/partmap/msdos.c index 6d4b455a1..6c13c6b8b 100644 --- a/grub-core/partmap/msdos.c +++ b/grub-core/partmap/msdos.c @@ -180,6 +180,7 @@ grub_partition_msdos_iterate (grub_disk_t disk, p.len = grub_le_to_cpu32 (e->length) << (disk->log_sector_size - GRUB_DISK_SECTOR_BITS); p.msdostype = e->type; + p.flag = e->flag; grub_dprintf ("partition", "partition %d: flag 0x%x, type 0x%x, start 0x%llx, len 0x%llx\n", diff --git a/include/grub/partition.h b/include/grub/partition.h index 7adb7ec6e..d450415e0 100644 --- a/include/grub/partition.h +++ b/include/grub/partition.h @@ -87,6 +87,9 @@ struct grub_partition /* The type of partition whne it's on MSDOS. Used for embedding detection. */ grub_uint8_t msdostype; + + /* Partition flag */ + grub_uint8_t flag; }; grub_partition_t EXPORT_FUNC(grub_partition_probe) (struct grub_disk *disk, -- 2.14.1 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel