[PATCH] uefi: uefidump: small re-working of uefi GUID lookup

IvanHu ivan.hu at canonical.com
Wed Mar 5 03:22:11 UTC 2014


On 02/27/2014 11:16 PM, Colin King wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> I've taken the liberty to re-work the GUID lookup to
> couple guid and str arrays into an array of guid_maps.
> No functional change.
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
>   src/uefi/uefidump/uefidump.c | 59 +++++++++++++++++++++-----------------------
>   1 file changed, 28 insertions(+), 31 deletions(-)
>
> diff --git a/src/uefi/uefidump/uefidump.c b/src/uefi/uefidump/uefidump.c
> index cc1137f..eb75c15 100644
> --- a/src/uefi/uefidump/uefidump.c
> +++ b/src/uefi/uefidump/uefidump.c
> @@ -1059,40 +1059,34 @@ static void uefidump_info_keyoption(fwts_framework *fw, fwts_uefi_var *var)
>   	}
>   }
>
> +#define GUID_MAP(x) { x, # x }
> +
>   static void uefidump_info_signaturedatabase(fwts_framework *fw, fwts_uefi_var *var)
>   {
>   	fwts_uefi_signature_list *signature_list;
>   	char guid_str[37];
>   	size_t offset = 0, list_start = 0;
>   	size_t i;
> -	fwts_uefi_guid guid[] = {
> -			EFI_CERT_X509_GUID,
> -			EFI_CERT_SHA256_GUID,
> -			EFI_CERT_RSA2048_GUID,
> -			EFI_CERT_RSA2048_SHA256_GUID,
> -			EFI_CERT_SHA1_GUID,
> -			EFI_CERT_RSA2048_SHA1_GUID,
> -			EFI_CERT_SHA224_GUID,
> -			EFI_CERT_SHA384_GUID,
> -			EFI_CERT_SHA512_GUID,
> -			EFI_CERT_X509_SHA256_GUID,
> -			EFI_CERT_X509_SHA384_GUID,
> -			EFI_CERT_X509_SHA512_GUID
> -	};
> -	char *str[] = {
> -		"EFI_CERT_X509_GUID",
> -		"EFI_CERT_SHA256_GUID",
> -		"EFI_CERT_RSA2048_GUID",
> -		"EFI_CERT_RSA2048_SHA256_GUID",
> -		"EFI_CERT_SHA1_GUID",
> -		"EFI_CERT_RSA2048_SHA1_GUID",
> -		"EFI_CERT_SHA224_GUID",
> -		"EFI_CERT_SHA384_GUID",
> -		"EFI_CERT_SHA512_GUID",
> -		"EFI_CERT_X509_SHA256_GUID",
> -		"EFI_CERT_X509_SHA384_GUID",
> -		"EFI_CERT_X509_SHA512_GUID",
> -		"Unknown GUID"
> +
> +	typedef struct {
> +		const fwts_uefi_guid guid;
> +		const char *str;
> +	} guid_map;
> +
> +	static const guid_map guids[] = {
> +		GUID_MAP(EFI_CERT_X509_GUID),
> +		GUID_MAP(EFI_CERT_SHA256_GUID),
> +		GUID_MAP(EFI_CERT_RSA2048_GUID),
> +		GUID_MAP(EFI_CERT_RSA2048_SHA256_GUID),
> +		GUID_MAP(EFI_CERT_SHA1_GUID),
> +		GUID_MAP(EFI_CERT_RSA2048_SHA1_GUID),
> +		GUID_MAP(EFI_CERT_SHA224_GUID),
> +		GUID_MAP(EFI_CERT_SHA384_GUID),
> +		GUID_MAP(EFI_CERT_SHA512_GUID),
> +		GUID_MAP(EFI_CERT_X509_SHA256_GUID),
> +		GUID_MAP(EFI_CERT_X509_SHA384_GUID),
> +		GUID_MAP(EFI_CERT_X509_SHA512_GUID),
> +		{ { 0, }, NULL }
Seems it causes the compiler error on gcc 4.6.3,

uefi/uefidump/uefidump.c:1092:3: error: (near initialization for 
‘guids[12].guid.info2’) [-Werror=missing-field-initializers]
cc1: all warnings being treated as errors
make[3]: *** [uefi/uefidump/fwts-uefidump.o] Error 1
make[3]: Leaving directory `/home/work/fwts/src'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/work/fwts/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/work/fwts'
make: *** [all] Error 2

>   	};
>
>   	if (var->datalen < sizeof(fwts_uefi_signature_list))
> @@ -1101,12 +1095,15 @@ static void uefidump_info_signaturedatabase(fwts_framework *fw, fwts_uefi_var *v
>   	do {
>   		signature_list = (fwts_uefi_signature_list *)(var->data + list_start);
>   		fwts_guid_buf_to_str(var->data, guid_str, sizeof(guid_str));
> +		const char *str = "Unknown GUID";
>
> -		for (i = 0; i < sizeof(guid)/sizeof(guid[0]); i++)
> -			if (memcmp(var->data, &guid[i], sizeof(fwts_uefi_guid)) == 0)
> +		for (i = 0; guids[i].str; i++)
> +			if (!memcmp(var->data, &guids[i].guid, sizeof(fwts_uefi_guid))) {
> +				str = guids[i].str;
>   				break;
> +			}
>
> -		fwts_log_info_verbatum(fw, "  SignatureType: %s (%s)", guid_str, str[i]);
> +		fwts_log_info_verbatum(fw, "  SignatureType: %s (%s)", guid_str, str);
>   		fwts_log_info_verbatum(fw, "  SignatureListSize: 0x%" PRIx32, signature_list->signaturelistsize);
>   		fwts_log_info_verbatum(fw, "  SignatureHeaderSize: 0x%" PRIx32, signature_list->signatureheadersize);
>   		fwts_log_info_verbatum(fw, "  SignatureSize: 0x%" PRIx32, signature_list->signaturesize);
>




More information about the fwts-devel mailing list