[PATCH] cmd: env: fix unreachable statements

Heinrich Schuchardt xypron.glpk at gmx.de
Fri May 8 18:10:27 CEST 2020


On 08.05.20 07:51, AKASHI Takahiro wrote:
> C's switch statement takes an integer value for switching.
> As efi_status_t is defined as unsigned long and each error code has
> the top bit set, all "cases" cannot be reachable.
>
> Signed-off-by: AKASHI Takahiro <takahiro.akashi at linaro.org>
> Reported-by: Coverity (CID 300335)

The requirement of C 1999 specification is:
"The controlling expression of a switch statement shall have integer
type." The requirement is not that the controlling expression should be int.

GCC works fine with uint64_t as argument of a switch statement.

To me this is a false positive of Coverity.

Best regards

Heinrich

> ---
>  cmd/nvedit_efi.c | 20 ++++++--------------
>  1 file changed, 6 insertions(+), 14 deletions(-)
>
> diff --git a/cmd/nvedit_efi.c b/cmd/nvedit_efi.c
> index 837e39e02179..84cba0c7324b 100644
> --- a/cmd/nvedit_efi.c
> +++ b/cmd/nvedit_efi.c
> @@ -597,26 +597,18 @@ int do_env_set_efi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>  	} else {
>  		const char *msg;
>
> -		switch (ret) {
> -		case EFI_NOT_FOUND:
> +		if (ret == EFI_NOT_FOUND)
>  			msg = " (not found)";
> -			break;
> -		case EFI_WRITE_PROTECTED:
> +		else if (ret == EFI_WRITE_PROTECTED)
>  			msg = " (read only)";
> -			break;
> -		case EFI_INVALID_PARAMETER:
> +		else if (ret == EFI_INVALID_PARAMETER)
>  			msg = " (invalid parameter)";
> -			break;
> -		case EFI_SECURITY_VIOLATION:
> +		else if (ret == EFI_SECURITY_VIOLATION)
>  			msg = " (validation failed)";
> -			break;
> -		case EFI_OUT_OF_RESOURCES:
> +		else if (ret == EFI_OUT_OF_RESOURCES)
>  			msg = " (out of memory)";
> -			break;
> -		default:
> +		else
>  			msg = "";
> -			break;
> -		}
>  		printf("## Failed to set EFI variable%s\n", msg);
>  		ret = CMD_RET_FAILURE;
>  	}
>



More information about the U-Boot mailing list