From 92b5bd1ce321d3655420a168e965955d2f07a687 Mon Sep 17 00:00:00 2001 From: Vito Caputo Date: Thu, 25 Aug 2016 17:21:18 -0700 Subject: [PATCH] gpt: add helper for picking a valid header Eliminate some repetition in primary vs. backup header acquisition. --- grub-core/lib/gpt.c | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/grub-core/lib/gpt.c b/grub-core/lib/gpt.c index 48cc53de4..4c5156368 100644 --- a/grub-core/lib/gpt.c +++ b/grub-core/lib/gpt.c @@ -108,21 +108,32 @@ grub_gpt_part_uuid (grub_device_t device, char **uuid) return GRUB_ERR_NONE; } +static struct grub_gpt_header * +grub_gpt_get_header (grub_gpt_t gpt) +{ + if (gpt->status & GRUB_GPT_PRIMARY_HEADER_VALID) + return &gpt->primary; + else if (gpt->status & GRUB_GPT_BACKUP_HEADER_VALID) + return &gpt->backup; + + grub_error (GRUB_ERR_BUG, "No valid GPT header"); + return NULL; +} + grub_err_t grub_gpt_disk_uuid (grub_device_t device, char **uuid) { + struct grub_gpt_header *header; + grub_gpt_t gpt = grub_gpt_read (device->disk); if (!gpt) goto done; - grub_errno = GRUB_ERR_NONE; + header = grub_gpt_get_header (gpt); + if (!header) + goto done; - if (gpt->status & GRUB_GPT_PRIMARY_HEADER_VALID) - *uuid = grub_gpt_guid_to_str (&gpt->primary.guid); - else if (gpt->status & GRUB_GPT_BACKUP_HEADER_VALID) - *uuid = grub_gpt_guid_to_str (&gpt->backup.guid); - else - grub_errno = grub_error (GRUB_ERR_BUG, "No valid GPT header"); + *uuid = grub_gpt_guid_to_str (&header->guid); done: grub_gpt_free (gpt); @@ -552,11 +563,8 @@ grub_gpt_get_partentry (grub_gpt_t gpt, grub_uint32_t n) struct grub_gpt_header *header; grub_size_t offset; - if (gpt->status & GRUB_GPT_PRIMARY_HEADER_VALID) - header = &gpt->primary; - else if (gpt->status & GRUB_GPT_BACKUP_HEADER_VALID) - header = &gpt->backup; - else + header = grub_gpt_get_header (gpt); + if (!header) return NULL; if (n >= grub_le_to_cpu32 (header->maxpart))