Отправлено с iPhone
> 27 февр. 2017 г., в 3:35, Vladimir 'phcoder' Serbinenko <phco...@gmail.com> > написал(а): > > > >> On Sun, Feb 26, 2017, 16:22 Nicholas Vinson <nvinson...@gmail.com> wrote: >> From: Steve Kenton <address@hidden> > > Please avoid resubmitting patches made by someone else in most cases. It > obscures proper attribution. We can review his patch in his thread In defense, the idea of consolidated patch series was mine, so blame me if you think it was wrong. >> >> --- >> grub-core/commands/probe.c | 59 >> ++++++++++++++++++++++++++++++++++++++++++++++ >> 1 file changed, 59 insertions(+) >> >> diff --git a/grub-core/commands/probe.c b/grub-core/commands/probe.c >> index cf2793e1d..5dd1a6bc5 100644 >> --- a/grub-core/commands/probe.c >> +++ b/grub-core/commands/probe.c >> @@ -16,6 +16,7 @@ >> * along with GRUB. If not, see <http://www.gnu.org/licenses/>. >> */ >> >> +#include <stddef.h> >> #include <grub/types.h> >> #include <grub/misc.h> >> #include <grub/mm.h> >> @@ -24,6 +25,8 @@ >> #include <grub/device.h> >> #include <grub/disk.h> >> #include <grub/partition.h> >> +#include <grub/gpt_partition.h> >> +#include <grub/i386/pc/boot.h> >> #include <grub/net.h> >> #include <grub/fs.h> >> #include <grub/file.h> >> @@ -45,6 +48,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}, >> + {"partuuid", 'g', 0, N_("Determine partition GUID/UUID."), 0, 0}, >> /* GUID but Linux kernel calls it "PARTUUID" */ >> {0, 0, 0, 0, 0, 0} >> }; >> >> @@ -154,6 +158,61 @@ grub_cmd_probe (grub_extcmd_context_t ctxt, int argc, >> char **args) >> grub_device_close (dev); >> return GRUB_ERR_NONE; >> } >> + if (state[6].set) >> + { >> + char *partuuid = NULL; /* NULL to silence a spurious GCC warning */ >> + /* Nested partitions are not supported for now. */ >> + /* Non-nested partitions must have dev->disk->partition->parent == >> NULL */ >> + if (dev->disk && dev->disk->partition && dev->disk->partition->parent >> == NULL) >> + { >> + grub_partition_t p = dev->disk->partition; >> + if (grub_strcmp (p->partmap->name, "msdos") == 0) >> + { >> + /* little-endian 4-byte NT disk id "GUID" in the MBR */ >> + grub_uint8_t diskid[4]; >> + dev->disk->partition = p->parent; >> + grub_uint32_t nt_disk_sig; >> + err = grub_disk_read (dev->disk, 0, >> GRUB_BOOT_MACHINE_WINDOWS_NT_MAGIC, sizeof(diskid), diskid); >> + dev->disk->partition = p; >> + if (err) >> + return grub_errno; >> + /* partition numbers are one-based */ >> + partuuid = grub_xasprintf ("%02x%02x%02x%02x-%02x", >> + diskid[3], diskid[2], diskid[1], >> disk[0], >> + p->number + 1); >> + } >> + else if (grub_strcmp (p->partmap->name, "gpt") == 0) >> + { >> + struct grub_gpt_partentry e; >> + dev->disk->partition = p->parent; >> + err = grub_disk_read (dev->disk, p->offset, p->index, sizeof e, >> &e); >> + dev->disk->partition = p; >> + if (err) >> + return grub_errno; >> + >> + partuuid = grub_xasprintf >> ("%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x", >> + e.guid[3], e.guid[2], e.guid[1], >> e.guid[0], >> + e.guid[5], e.guid[4], >> + e.guid[7], e.guid[6], >> + e.guid[8], e.guid[9], >> + e.guid[10], e.guid[11], e.guid[12], >> e.guid[13], e.guid[14], e.guid[15]); >> + } >> + else >> + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, >> + N_("partition map %s does not support >> partition UUIDs"), >> + dev->disk->partition->partmap->name); >> + } >> + else >> + partuuid = grub_strdup (""); /* a freeable empty string */ >> + >> + if (state[0].set) >> + grub_env_set (state[0].arg, partuuid); >> + else >> + grub_printf ("%s", partuuid); >> + grub_free (partuuid); >> + grub_device_close (dev); >> + return GRUB_ERR_NONE; >> + } >> grub_device_close (dev); >> return grub_error (GRUB_ERR_BAD_ARGUMENT, "unrecognised target"); >> } >> -- >> 2.12.0 >> >> >> _______________________________________________ >> Grub-devel mailing list >> Grub-devel@gnu.org >> https://lists.gnu.org/mailman/listinfo/grub-devel > _______________________________________________ > Grub-devel mailing list > Grub-devel@gnu.org > https://lists.gnu.org/mailman/listinfo/grub-devel
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel