[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