bootflow: Rework do_bootflow_menu() slightly
authorTom Rini <trini@konsulko.com>
Thu, 6 Apr 2023 14:03:33 +0000 (10:03 -0400)
committerSimon Glass <sjg@chromium.org>
Fri, 28 Apr 2023 17:30:17 +0000 (11:30 -0600)
When building this with clang, we get a warning such as:
cmd/bootflow.c:412:27: warning: variable 'bflow' is uninitialized when used here [-Wuninitialized]
        printf("Selected: %s\n", bflow->os_name ? bflow->os_name : bflow->name);
                                 ^~~~~

And a suggestion to just initialize bflow to NULL. This would however
would be ensuring a bad dereference. Instead, looking at the function we
rework things so that when CONFIG_EXPO is not enabled (and so, no UI) we
error early and would never reach this point in the code.  Simplify the
rest slightly as well while at this.

Signed-off-by: Tom Rini <trini@konsulko.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
cmd/bootflow.c

index aa06999..cfe3422 100644 (file)
@@ -390,6 +390,11 @@ static int do_bootflow_menu(struct cmd_tbl *cmdtp, int flag, int argc,
        bool text_mode = false;
        int ret;
 
+       if (!IS_ENABLED(CONFIG_EXPO)) {
+               printf("Menu not supported\n");
+               return CMD_RET_FAILURE;
+       }
+
        if (argc > 1 && *argv[1] == '-')
                text_mode = strchr(argv[1], 't');
 
@@ -397,20 +402,15 @@ static int do_bootflow_menu(struct cmd_tbl *cmdtp, int flag, int argc,
        if (ret)
                return CMD_RET_FAILURE;
 
-       if (IS_ENABLED(CONFIG_EXPO)) {
-               ret = bootflow_menu_run(std, text_mode, &bflow);
-               if (ret) {
-                       if (ret == -EAGAIN)
-                               printf("Nothing chosen\n");
-                       else
-                               printf("Menu failed (err=%d)\n", ret);
+       ret = bootflow_menu_run(std, text_mode, &bflow);
+       if (ret) {
+               if (ret == -EAGAIN)
+                       printf("Nothing chosen\n");
+               else {
+                       printf("Menu failed (err=%d)\n", ret);
+                       return CMD_RET_FAILURE;
                }
-       } else {
-               printf("Menu not supported\n");
-               ret = -ENOSYS;
        }
-       if (ret)
-               return CMD_RET_FAILURE;
 
        printf("Selected: %s\n", bflow->os_name ? bflow->os_name : bflow->name);
        std->cur_bootflow = bflow;