Pass the epd context pointer to find_valid_gpt() which we'll use in a
followup patch. This makes other arguments unnecessary, so they are
dropped. While at it change the return value of find_valid_gpt() to
standard 0 for success and negative error code otherwise.

Signed-off-by: Sascha Hauer <[email protected]>
---
 common/partitions/efi.c | 58 ++++++++++++++++++++++++-------------------------
 1 file changed, 29 insertions(+), 29 deletions(-)

diff --git a/common/partitions/efi.c b/common/partitions/efi.c
index 
88d8a2d739c4e545952684f5647d105d9f38b028..da9c2d89c1c68ae1acebc1f8eaea8da48243f0d6
 100644
--- a/common/partitions/efi.c
+++ b/common/partitions/efi.c
@@ -381,11 +381,10 @@ compare_gpts(struct device *dev, gpt_header *pgpt, 
gpt_header *agpt,
 
 /**
  * find_valid_gpt() - Search disk for valid GPT headers and PTEs
- * @state
- * @gpt is a GPT header ptr, filled on return.
- * @ptes is a PTEs ptr, filled on return.
- * Description: Returns 1 if valid, 0 on error.
- * If valid, returns pointers to newly allocated GPT header and PTEs.
+ * @buf buffer containing the first lba
+ * @epd the efi partition descriptor context pointer
+ * Description: Returns 0 for success, negative error code otherwise.
+ * If valid, epd is filled with pointers to newly allocated GPT header and 
PTEs.
  * Validity depends on PMBR being valid (or being overridden by the
  * 'gpt' kernel command line option) and finding either the Primary
  * GPT header and PTEs valid, or the Alternate GPT header and PTEs
@@ -394,17 +393,14 @@ compare_gpts(struct device *dev, gpt_header *pgpt, 
gpt_header *agpt,
  * This protects against devices which misreport their size, and forces
  * the user to decide to use the Alternate GPT.
  */
-static int find_valid_gpt(void *buf, struct block_device *blk, gpt_header 
**gpt,
-                         gpt_entry **ptes)
+static int find_valid_gpt(struct efi_partition_desc *epd, void *buf)
 {
+       struct block_device *blk = epd->pd.blk;
        int good_pgpt = 0, good_agpt = 0;
        gpt_header *pgpt = NULL, *agpt = NULL;
        gpt_entry *pptes = NULL, *aptes = NULL;
        u64 lastlba;
 
-       if (!ptes)
-               return 0;
-
        lastlba = last_lba(blk);
        if (force_gpt) {
                /* This will be added to the EFI Spec. per Intel after v1.02. */
@@ -430,21 +426,20 @@ static int find_valid_gpt(void *buf, struct block_device 
*blk, gpt_header **gpt,
 
        /* The good cases */
        if (good_pgpt) {
-               *gpt  = pgpt;
-               *ptes = pptes;
+               epd->gpt  = pgpt;
+               epd->ptes = pptes;
                free(agpt);
                free(aptes);
                if (!good_agpt)
                        dev_warn(blk->dev, "Alternate GPT is invalid, using 
primary GPT.\n");
-               return 1;
-       }
-       else if (good_agpt) {
-               *gpt  = agpt;
-               *ptes = aptes;
+               return 0;
+       } else {
+               epd->gpt  = agpt;
+               epd->ptes = aptes;
                free(pgpt);
                free(pptes);
                dev_warn(blk->dev, "Primary GPT is invalid, using alternate 
GPT.\n");
-               return 1;
+               return 0;
        }
 
  fail:
@@ -452,9 +447,8 @@ static int find_valid_gpt(void *buf, struct block_device 
*blk, gpt_header **gpt,
        free(agpt);
        free(pptes);
        free(aptes);
-       *gpt = NULL;
-       *ptes = NULL;
-       return 0;
+
+       return -EINVAL;
 }
 
 static void part_set_efi_name(gpt_entry *pte, char *dest)
@@ -516,9 +510,17 @@ static struct partition_desc *efi_partition(void *buf, 
struct block_device *blk)
        struct efi_partition *epart;
        struct partition *pentry;
        struct efi_partition_desc *epd;
+       int ret;
 
-       if (!find_valid_gpt(buf, blk, &gpt, &ptes) || !gpt || !ptes)
-               return NULL;
+       epd = xzalloc(sizeof(*epd));
+       partition_desc_init(&epd->pd, blk);
+
+       ret = find_valid_gpt(epd, buf);
+       if (ret)
+               goto err;
+
+       gpt = epd->gpt;
+       ptes = epd->ptes;
 
        blk->cdev.flags |= DEVFS_IS_GPT_PARTITIONED;
 
@@ -530,12 +532,6 @@ static struct partition_desc *efi_partition(void *buf, 
struct block_device *blk)
                nb_part = MAX_PARTITION;
        }
 
-       epd = xzalloc(sizeof(*epd));
-       partition_desc_init(&epd->pd, blk);
-
-       epd->gpt = gpt;
-       epd->ptes = ptes;
-
        snprintf(blk->cdev.diskuuid, sizeof(blk->cdev.diskuuid), "%pUl", 
&gpt->disk_guid);
        add_gpt_diskuuid_param(epd, blk);
 
@@ -560,6 +556,10 @@ static struct partition_desc *efi_partition(void *buf, 
struct block_device *blk)
        }
 
        return &epd->pd;
+err:
+       free(epd);
+
+       return NULL;
 }
 
 static void efi_partition_free(struct partition_desc *pd)

-- 
2.47.3


Reply via email to