OSDN Git Service

kconfig: fix missing '# end of' for empty menu
authorMasahiro Yamada <masahiroy@kernel.org>
Mon, 14 Feb 2022 03:19:18 +0000 (12:19 +0900)
committerMasahiro Yamada <masahiroy@kernel.org>
Fri, 18 Feb 2022 02:36:17 +0000 (11:36 +0900)
Currently, "# end of ..." is inserted when the menu goes back to its
parent.

Hence, an empty menu:

  menu "Foo"
  endmenu

... ends up with unbalanced menu comments, like this:

  #
  # Foo
  #

Let's close the menu comments properly:

  #
  # Foo
  #
  # end of Foo

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
scripts/kconfig/confdata.c

index 94dcec2..901835a 100644 (file)
@@ -903,19 +903,20 @@ next:
                        menu = menu->list;
                        continue;
                }
-               if (menu->next)
+
+end_check:
+               if (!menu->sym && menu_is_visible(menu) && menu != &rootmenu &&
+                   menu->prompt->type == P_MENU) {
+                       fprintf(out, "# end of %s\n", menu_get_prompt(menu));
+                       need_newline = true;
+               }
+
+               if (menu->next) {
                        menu = menu->next;
-               else while ((menu = menu->parent)) {
-                       if (!menu->sym && menu_is_visible(menu) &&
-                           menu != &rootmenu) {
-                               str = menu_get_prompt(menu);
-                               fprintf(out, "# end of %s\n", str);
-                               need_newline = true;
-                       }
-                       if (menu->next) {
-                               menu = menu->next;
-                               break;
-                       }
+               } else {
+                       menu = menu->parent;
+                       if (menu)
+                               goto end_check;
                }
        }
        fclose(out);