Hi Patrick,

On 5/19/25 10:04, Patrick Delaunay wrote:
> Add support of shortname for type parameter and restore "system"
> as short name for EFI System Partition (ESP) for filed "type" of the
> "gpt write" command.
> 
> Fixes: d54e1004b8b1 ("lib/uuid.c: use unique name for PARTITION_SYSTEM_GUID")
> Signed-off-by: Patrick Delaunay <patrick.delau...@foss.st.com>
> ---
> 
>  lib/uuid.c | 148 +++++++++++++++++++++++++++--------------------------
>  1 file changed, 76 insertions(+), 72 deletions(-)
> 
> diff --git a/lib/uuid.c b/lib/uuid.c
> index 6abbcf27b1f3..ee02fa4d600d 100644
> --- a/lib/uuid.c
> +++ b/lib/uuid.c
> @@ -62,184 +62,185 @@ int uuid_str_valid(const char *uuid)
>       return 1;
>  }
>  
> +/* List of known GUID for GPT partition type */
>  static const struct {
> -     const char *string;
> +     const char *string;     /* name for type parameter of gpt command */

const char *type?

> +     const char *description;/* description used for %pUs */
>       efi_guid_t guid;
>  } list_guid[] = {
>  #ifndef USE_HOSTCC
> -#if defined(CONFIG_PARTITION_TYPE_GUID) || defined(CONFIG_CMD_EFIDEBUG) || \
> -     defined(CONFIG_EFI)
> -     {"EFI System Partition", PARTITION_SYSTEM_GUID},
> -#endif
> -#ifdef CONFIG_PARTITION_TYPE_GUID
> -     {"mbr",         LEGACY_MBR_PARTITION_GUID},
> -     {"msft",        PARTITION_MSFT_RESERVED_GUID},
> -     {"data",        PARTITION_BASIC_DATA_GUID},
> -     {"linux",       PARTITION_LINUX_FILE_SYSTEM_DATA_GUID},
> -     {"raid",        PARTITION_LINUX_RAID_GUID},
> -     {"swap",        PARTITION_LINUX_SWAP_GUID},
> -     {"lvm",         PARTITION_LINUX_LVM_GUID},
> -     {"u-boot-env",  PARTITION_U_BOOT_ENVIRONMENT},
> -     {"cros-kern",   PARTITION_CROS_KERNEL},
> -     {"cros-root",   PARTITION_CROS_ROOT},
> -     {"cros-fw",     PARTITION_CROS_FIRMWARE},
> -     {"cros-rsrv",   PARTITION_CROS_RESERVED},
> -#endif
> +#if CONFIG_IS_ENABLED(EFI_PARTITION)
> +     {"mbr",         NULL,   LEGACY_MBR_PARTITION_GUID},
> +     {"msft",        NULL,   PARTITION_MSFT_RESERVED_GUID},
> +     {"data",        NULL,   PARTITION_BASIC_DATA_GUID},
> +     {"linux",       NULL,   PARTITION_LINUX_FILE_SYSTEM_DATA_GUID},
> +     {"raid",        NULL,   PARTITION_LINUX_RAID_GUID},
> +     {"swap",        NULL,   PARTITION_LINUX_SWAP_GUID},
> +     {"lvm",         NULL,   PARTITION_LINUX_LVM_GUID},
> +     {"u-boot-env",  NULL,   PARTITION_U_BOOT_ENVIRONMENT},
> +     {"cros-kern",   NULL,   PARTITION_CROS_KERNEL},
> +     {"cros-root",   NULL,   PARTITION_CROS_ROOT},
> +     {"cros-fw",     NULL,   PARTITION_CROS_FIRMWARE},
> +     {"cros-rsrv",   NULL,   PARTITION_CROS_RESERVED},
>  #if defined(CONFIG_CMD_EFIDEBUG) || defined(CONFIG_EFI)
>       {
> -             "Device Path",
> +             "system", "EFI System Partition",
> +             PARTITION_SYSTEM_GUID,
> +     },

The patch adds quite many NULLs to the list_guid[] only for this very
special case. We would be better off hardcoding the "system" case into
uuid_guid_get_bin() I think.

> +     {
> +             NULL, "Device Path",
>               EFI_DEVICE_PATH_PROTOCOL_GUID,
>       },
>       {
> -             "Device Path To Text",
> +             NULL, "Device Path To Text",
>               EFI_DEVICE_PATH_TO_TEXT_PROTOCOL_GUID,
>       },
>       {
> -             "Device Path Utilities",
> +             NULL, "Device Path Utilities",
>               EFI_DEVICE_PATH_UTILITIES_PROTOCOL_GUID,
>       },
>       {
> -             "Unicode Collation 2",
> +             NULL, "Unicode Collation 2",
>               EFI_UNICODE_COLLATION_PROTOCOL2_GUID,
>       },
>       {
> -             "Driver Binding",
> +             NULL, "Driver Binding",
>               EFI_DRIVER_BINDING_PROTOCOL_GUID,
>       },
>       {
> -             "Simple Text Input",
> +             NULL, "Simple Text Input",
>               EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID,
>       },
>       {
> -             "Simple Text Input Ex",
> +             NULL, "Simple Text Input Ex",
>               EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID,
>       },
>       {
> -             "Simple Text Output",
> +             NULL, "Simple Text Output",
>               EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID,
>       },
>       {
> -             "Block IO",
> +             NULL, "Block IO",
>               EFI_BLOCK_IO_PROTOCOL_GUID,
>       },
>       {
> -             "Disk IO",
> +             NULL, "Disk IO",
>               EFI_DISK_IO_PROTOCOL_GUID,
>       },
>       {
> -             "Simple File System",
> +             NULL, "Simple File System",
>               EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID,
>       },
>       {
> -             "Loaded Image",
> +             NULL, "Loaded Image",
>               EFI_LOADED_IMAGE_PROTOCOL_GUID,
>       },
>       {
> -             "Loaded Image Device Path",
> +             NULL, "Loaded Image Device Path",
>               EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL_GUID,
>       },
>       {
> -             "Graphics Output",
> +             NULL, "Graphics Output",
>               EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID,
>       },
>       {
> -             "HII String",
> +             NULL, "HII String",
>               EFI_HII_STRING_PROTOCOL_GUID,
>       },
>       {
> -             "HII Database",
> +             NULL, "HII Database",
>               EFI_HII_DATABASE_PROTOCOL_GUID,
>       },
>       {
> -             "HII Config Access",
> +             NULL, "HII Config Access",
>               EFI_HII_CONFIG_ACCESS_PROTOCOL_GUID,
>       },
>       {
> -             "HII Config Routing",
> +             NULL, "HII Config Routing",
>               EFI_HII_CONFIG_ROUTING_PROTOCOL_GUID,
>       },
>       {
> -             "Load File",
> +             NULL, "Load File",
>               EFI_LOAD_FILE_PROTOCOL_GUID,
>       },
>       {
> -             "Load File2",
> +             NULL, "Load File2",
>               EFI_LOAD_FILE2_PROTOCOL_GUID,
>       },
>       {
> -             "Random Number Generator",
> +             NULL, "Random Number Generator",
>               EFI_RNG_PROTOCOL_GUID,
>       },
>       {
> -             "Simple Network",
> +             NULL, "Simple Network",
>               EFI_SIMPLE_NETWORK_PROTOCOL_GUID,
>       },
>       {
> -             "PXE Base Code",
> +             NULL, "PXE Base Code",
>               EFI_PXE_BASE_CODE_PROTOCOL_GUID,
>       },
>       {
> -             "Device-Tree Fixup",
> +             NULL, "Device-Tree Fixup",
>               EFI_DT_FIXUP_PROTOCOL_GUID,
>       },
>       {
> -             "TCG2",
> +             NULL, "TCG2",
>               EFI_TCG2_PROTOCOL_GUID,
>       },
>       {
> -             "Firmware Management",
> +             NULL, "Firmware Management",
>               EFI_FIRMWARE_MANAGEMENT_PROTOCOL_GUID
>       },
>  #if IS_ENABLED(CONFIG_EFI_HTTP_PROTOCOL)
>       {
> -             "HTTP",
> +             NULL, "HTTP",
>               EFI_HTTP_PROTOCOL_GUID,
>       },
>       {
> -             "HTTP Service Binding",
> +             NULL, "HTTP Service Binding",
>               EFI_HTTP_SERVICE_BINDING_PROTOCOL_GUID,
>       },
>       {
> -             "IPv4 Config2",
> +             NULL, "IPv4 Config2",
>               EFI_IP4_CONFIG2_PROTOCOL_GUID,
>       },
>  #endif
>       /* Configuration table GUIDs */
>       {
> -             "ACPI table",
> +             NULL, "ACPI table",
>               EFI_ACPI_TABLE_GUID,
>       },
>       {
> -             "EFI System Resource Table",
> +             NULL, "EFI System Resource Table",
>               EFI_SYSTEM_RESOURCE_TABLE_GUID,
>       },
>       {
> -             "device tree",
> +             NULL, "device tree",
>               EFI_FDT_GUID,
>       },
>       {
> -             "SMBIOS table",
> +             NULL, "SMBIOS table",
>               SMBIOS_TABLE_GUID,
>       },
>       {
> -             "SMBIOS3 table",
> +             NULL, "SMBIOS3 table",
>               SMBIOS3_TABLE_GUID,
>       },
>       {
> -             "Runtime properties",
> +             NULL, "Runtime properties",
>               EFI_RT_PROPERTIES_TABLE_GUID,
>       },
>       {
> -             "TCG2 Final Events Table",
> +             NULL, "TCG2 Final Events Table",
>               EFI_TCG2_FINAL_EVENTS_TABLE_GUID,
>       },
>       {
> -             "EFI Conformance Profiles Table",
> +             NULL, "EFI Conformance Profiles Table",
>               EFI_CONFORMANCE_PROFILES_TABLE_GUID,
>       },
>  #ifdef CONFIG_EFI_RISCV_BOOT_PROTOCOL
>       {
> -             "RISC-V Boot",
> +             NULL, "RISC-V Boot",
>               RISCV_EFI_BOOT_PROTOCOL_GUID,
>       },
>  #endif
> @@ -247,35 +248,36 @@ static const struct {
>  #ifdef CONFIG_CMD_NVEDIT_EFI
>       /* signature database */
>       {
> -             "EFI_GLOBAL_VARIABLE_GUID",
> +             NULL, "EFI_GLOBAL_VARIABLE_GUID",
>               EFI_GLOBAL_VARIABLE_GUID,
>       },
>       {
> -             "EFI_IMAGE_SECURITY_DATABASE_GUID",
> +             NULL, "EFI_IMAGE_SECURITY_DATABASE_GUID",
>               EFI_IMAGE_SECURITY_DATABASE_GUID,
>       },
>       /* certificate types */
>       {
> -             "EFI_CERT_SHA256_GUID",
> +             NULL, "EFI_CERT_SHA256_GUID",
>               EFI_CERT_SHA256_GUID,
>       },
>       {
> -             "EFI_CERT_X509_GUID",
> +             NULL, "EFI_CERT_X509_GUID",
>               EFI_CERT_X509_GUID,
>       },
>       {
> -             "EFI_CERT_TYPE_PKCS7_GUID",
> +             NULL, "EFI_CERT_TYPE_PKCS7_GUID",
>               EFI_CERT_TYPE_PKCS7_GUID,
>       },
>  #endif
>  #if defined(CONFIG_CMD_EFIDEBUG) || defined(CONFIG_EFI)
> -     { "EFI_LZMA_COMPRESSED", EFI_LZMA_COMPRESSED },
> -     { "EFI_DXE_SERVICES", EFI_DXE_SERVICES },
> -     { "EFI_HOB_LIST", EFI_HOB_LIST },
> -     { "EFI_MEMORY_TYPE", EFI_MEMORY_TYPE },
> -     { "EFI_MEM_STATUS_CODE_REC", EFI_MEM_STATUS_CODE_REC },
> -     { "EFI_GUID_EFI_ACPI1", EFI_GUID_EFI_ACPI1 },
> +     { NULL, "EFI_LZMA_COMPRESSED", EFI_LZMA_COMPRESSED },
> +     { NULL, "EFI_DXE_SERVICES", EFI_DXE_SERVICES },
> +     { NULL, "EFI_HOB_LIST", EFI_HOB_LIST },
> +     { NULL, "EFI_MEMORY_TYPE", EFI_MEMORY_TYPE },
> +     { NULL, "EFI_MEM_STATUS_CODE_REC", EFI_MEM_STATUS_CODE_REC },
> +     { NULL, "EFI_GUID_EFI_ACPI1", EFI_GUID_EFI_ACPI1 },
>  #endif
> +#endif /* EFI_PARTITION */
>  #endif /* !USE_HOSTCC */
>  };
>  
> @@ -284,7 +286,8 @@ int uuid_guid_get_bin(const char *guid_str, unsigned char 
> *guid_bin)
>       int i;
>  
>       for (i = 0; i < ARRAY_SIZE(list_guid); i++) {
> -             if (!strcmp(list_guid[i].string, guid_str)) {
> +             if (list_guid[i].string &&
> +                 !strcmp(list_guid[i].string, guid_str)) {
>                       memcpy(guid_bin, &list_guid[i].guid, 16);
>                       return 0;
>               }
> @@ -298,6 +301,8 @@ const char *uuid_guid_get_str(const unsigned char 
> *guid_bin)

Should this be called uuid_guid_get_type() instead? 'str' or 'string' are 
confusing.
We should have 'type' and 'decription' IMO.

>  
>       for (i = 0; i < ARRAY_SIZE(list_guid); i++) {
>               if (!memcmp(list_guid[i].guid.b, guid_bin, 16)) {
> +                     if (list_guid[i].description)
> +                             return list_guid[i].description;
>                       return list_guid[i].string;

.description is never (or should never be) NULL. No need to return .string as a 
fallback.

>               }
>       }
> @@ -312,10 +317,9 @@ int uuid_str_to_bin(const char *uuid_str, unsigned char 
> *uuid_bin,
>       uint64_t tmp64;
>  
>       if (!uuid_str_valid(uuid_str)) {
> -#ifdef CONFIG_PARTITION_TYPE_GUID
> -             if (!uuid_guid_get_bin(uuid_str, uuid_bin))
> +             if (IS_ENABLED(CONFIG_PARTITION_TYPE_GUID) &&
> +                 !uuid_guid_get_bin(uuid_str, uuid_bin))
>                       return 0;
> -#endif
>               return -EINVAL;
>       }
>  

Thanks,
-- 
Jerome

Reply via email to