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 <[email protected]>
> 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;
>       }
>

Reply via email to