]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
part: Add accessors for struct disk_partition uuid
authorSimon Glass <sjg@chromium.org>
Thu, 24 Aug 2023 19:55:31 +0000 (13:55 -0600)
committerTom Rini <trini@konsulko.com>
Fri, 25 Aug 2023 21:55:18 +0000 (17:55 -0400)
This field is only present when a CONFIG is set. To avoid annoying #ifdefs
in the source code, add accessors. Update all code to use it.

Note that the accessor is optional. It can be omitted if it is known that
the option is enabled.

Signed-off-by: Simon Glass <sjg@chromium.org>
cmd/gpt.c
disk/part.c
disk/part_dos.c
disk/part_efi.c
fs/fat/fat.c
include/part.h

index 007a68eaa72a6ada286a36683946edb7bf450e9c..8969efba8c807e4a87a92a299286582b55620219 100644 (file)
--- a/cmd/gpt.c
+++ b/cmd/gpt.c
@@ -211,12 +211,10 @@ static struct disk_part *allocate_disk_part(struct disk_partition *info,
                PART_TYPE_LEN);
        newpart->gpt_part_info.type[PART_TYPE_LEN - 1] = '\0';
        newpart->gpt_part_info.bootable = info->bootable;
-#ifdef CONFIG_PARTITION_UUIDS
-       strncpy(newpart->gpt_part_info.uuid, (const char *)info->uuid,
-               UUID_STR_LEN);
-       /* UUID_STR_LEN is correct, as uuid[]'s length is UUID_STR_LEN+1 chars */
-       newpart->gpt_part_info.uuid[UUID_STR_LEN] = '\0';
-#endif
+       if (IS_ENABLED(CONFIG_PARTITION_UUIDS)) {
+               strlcpy(newpart->gpt_part_info.uuid, disk_partition_uuid(info),
+                       UUID_STR_LEN + 1);
+       }
        newpart->partnum = partnum;
 
        return newpart;
index 9190e8806187098966fdd538d6f328f4588682d2..91c6ac42cc83dfcd6621561a3c721559011bfd79 100644 (file)
@@ -368,10 +368,8 @@ int part_get_info_by_type(struct blk_desc *desc, int part, int part_type,
        struct part_driver *drv;
 
        if (blk_enabled()) {
-#if CONFIG_IS_ENABLED(PARTITION_UUIDS)
                /* The common case is no UUID support */
-               info->uuid[0] = 0;
-#endif
+               disk_partition_clr_uuid(info);
 #ifdef CONFIG_PARTITION_TYPE_GUID
                info->type_guid[0] = 0;
 #endif
@@ -416,9 +414,7 @@ int part_get_info_whole_disk(struct blk_desc *desc,
        info->bootable = 0;
        strcpy((char *)info->type, BOOT_PART_TYPE);
        strcpy((char *)info->name, "Whole Disk");
-#if CONFIG_IS_ENABLED(PARTITION_UUIDS)
-       info->uuid[0] = 0;
-#endif
+       disk_partition_clr_uuid(info);
 #ifdef CONFIG_PARTITION_TYPE_GUID
        info->type_guid[0] = 0;
 #endif
index cc050ca8c49f0408d558a333332bbd782c91fbc4..33374384373a67337ce6c359bf3f53e54494d11f 100644 (file)
@@ -231,10 +231,8 @@ static int part_get_info_extended(struct blk_desc *desc,
                return -1;
        }
 
-#if CONFIG_IS_ENABLED(PARTITION_UUIDS)
-       if (!ext_part_sector)
+       if (CONFIG_IS_ENABLED(PARTITION_UUIDS) && !ext_part_sector)
                disksig = get_unaligned_le32(&buffer[DOS_PART_DISKSIG_OFFSET]);
-#endif
 
        ret = part_get_info_whole_disk(desc, &wdinfo);
        if (ret)
@@ -263,9 +261,12 @@ static int part_get_info_extended(struct blk_desc *desc,
                        /* sprintf(info->type, "%d, pt->sys_ind); */
                        strcpy((char *)info->type, "U-Boot");
                        info->bootable = get_bootable(pt);
-#if CONFIG_IS_ENABLED(PARTITION_UUIDS)
-                       sprintf(info->uuid, "%08x-%02x", disksig, part_num);
-#endif
+                       if (CONFIG_IS_ENABLED(PARTITION_UUIDS)) {
+                               char str[12];
+
+                               sprintf(str, "%08x-%02x", disksig, part_num);
+                               disk_partition_set_uuid(info, str);
+                       }
                        info->sys_ind = pt->sys_ind;
                        return 0;
                }
@@ -302,9 +303,7 @@ static int part_get_info_extended(struct blk_desc *desc,
                        info->blksz = DOS_PART_DEFAULT_SECTOR;
                info->bootable = 0;
                strcpy((char *)info->type, "U-Boot");
-#if CONFIG_IS_ENABLED(PARTITION_UUIDS)
-               info->uuid[0] = 0;
-#endif
+               disk_partition_clr_uuid(info);
                return 0;
        }
 
index 4ac21868d088f2c75bccceed09915cce309b8e10..a6f7375cd38a5726d7cbbe9c290b5734564b9600 100644 (file)
@@ -289,10 +289,11 @@ int part_get_info_efi(struct blk_desc *desc, int part,
                 print_efiname(&gpt_pte[part - 1]));
        strcpy((char *)info->type, "U-Boot");
        info->bootable = get_bootable(&gpt_pte[part - 1]);
-#if CONFIG_IS_ENABLED(PARTITION_UUIDS)
-       uuid_bin_to_str(gpt_pte[part - 1].unique_partition_guid.b, info->uuid,
-                       UUID_STR_FORMAT_GUID);
-#endif
+       if (CONFIG_IS_ENABLED(PARTITION_UUIDS)) {
+               uuid_bin_to_str(gpt_pte[part - 1].unique_partition_guid.b,
+                               (char *)disk_partition_uuid(info),
+                               UUID_STR_FORMAT_GUID);
+       }
 #ifdef CONFIG_PARTITION_TYPE_GUID
        uuid_bin_to_str(gpt_pte[part - 1].partition_type_guid.b,
                        info->type_guid, UUID_STR_FORMAT_GUID);
@@ -415,10 +416,7 @@ int gpt_fill_pte(struct blk_desc *desc,
                        le64_to_cpu(gpt_h->last_usable_lba);
        int i, k;
        size_t efiname_len, dosname_len;
-#if CONFIG_IS_ENABLED(PARTITION_UUIDS)
-       char *str_uuid;
        unsigned char *bin_uuid;
-#endif
 #ifdef CONFIG_PARTITION_TYPE_GUID
        char *str_type_guid;
        unsigned char *bin_type_guid;
@@ -487,16 +485,19 @@ int gpt_fill_pte(struct blk_desc *desc,
                        &partition_basic_data_guid, 16);
 #endif
 
-#if CONFIG_IS_ENABLED(PARTITION_UUIDS)
-               str_uuid = partitions[i].uuid;
-               bin_uuid = gpt_e[i].unique_partition_guid.b;
+               if (CONFIG_IS_ENABLED(PARTITION_UUIDS)) {
+                       const char *str_uuid;
+
+                       str_uuid = disk_partition_uuid(&partitions[i]);
+                       bin_uuid = gpt_e[i].unique_partition_guid.b;
 
-               if (uuid_str_to_bin(str_uuid, bin_uuid, UUID_STR_FORMAT_GUID)) {
-                       log_debug("Partition no. %d: invalid guid: %s\n",
-                                 i, str_uuid);
-                       return -EINVAL;
+                       if (uuid_str_to_bin(str_uuid, bin_uuid,
+                                           UUID_STR_FORMAT_GUID)) {
+                               log_debug("Partition no. %d: invalid guid: %s\n",
+                                         i, str_uuid);
+                               return -EINVAL;
+                       }
                }
-#endif
 
                /* partition attributes */
                memset(&gpt_e[i].attributes, 0,
index d1476aa433d6fe920ac2a58d842f842cbe3d5311..8ff1fd0ec83506c4891893fbe4b25af6018f8802 100644 (file)
@@ -110,9 +110,7 @@ int fat_register_device(struct blk_desc *dev_desc, int part_no)
                info.name[0] = 0;
                info.type[0] = 0;
                info.bootable = 0;
-#if CONFIG_IS_ENABLED(PARTITION_UUIDS)
-               info.uuid[0] = 0;
-#endif
+               disk_partition_clr_uuid(&info);
        }
 
        return fat_set_blk_dev(dev_desc, &info);
index 3a6be75421dd0c1ed0462f77f2bcbd322370a33b..8e5e543c56ec7a568e26aa81ecbd428e08655871 100644 (file)
@@ -80,6 +80,33 @@ struct disk_partition {
 #endif
 };
 
+/* Accessors for struct disk_partition field ->uuid */
+extern char *__invalid_use_of_disk_partition_uuid;
+
+static inline const char *disk_partition_uuid(const struct disk_partition *info)
+{
+#if CONFIG_IS_ENABLED(PARTITION_UUIDS)
+       return info->uuid;
+#else
+       return __invalid_use_of_disk_partition_uuid;
+#endif
+}
+
+static inline void disk_partition_set_uuid(struct disk_partition *info,
+                                          const char *val)
+{
+#if CONFIG_IS_ENABLED(PARTITION_UUIDS)
+       strlcpy(info->uuid, val, UUID_STR_LEN + 1);
+#endif
+}
+
+static inline void disk_partition_clr_uuid(struct disk_partition *info)
+{
+#if CONFIG_IS_ENABLED(PARTITION_UUIDS)
+       *info->uuid = '\0';
+#endif
+}
+
 struct disk_part {
        int partnum;
        struct disk_partition gpt_part_info;