kconfig: use menu_for_each_entry() to traverse menu tree
authorMasahiro Yamada <masahiroy@kernel.org>
Sun, 21 Apr 2024 09:02:52 +0000 (18:02 +0900)
committerMasahiro Yamada <masahiroy@kernel.org>
Thu, 2 May 2024 10:48:26 +0000 (19:48 +0900)
Use menu_for_each_entry() to traverse the menu tree instead of
implementing similar logic in each function.

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

index 0e35c4819cf1d2f71e998b11cac56cdfea9fbbc4..ce0ef417b71b32b8556143acf6ad151b95520a94 100644 (file)
@@ -793,23 +793,19 @@ int conf_write_defconfig(const char *filename)
 
        sym_clear_all_valid();
 
-       /* Traverse all menus to find all relevant symbols */
-       menu = rootmenu.list;
-
-       while (menu != NULL)
-       {
+       menu_for_each_entry(menu) {
                sym = menu->sym;
                if (sym && !sym_is_choice(sym)) {
                        sym_calc_value(sym);
                        if (!(sym->flags & SYMBOL_WRITE))
-                               goto next_menu;
+                               continue;
                        sym->flags &= ~SYMBOL_WRITE;
                        /* If we cannot change the symbol - skip */
                        if (!sym_is_changeable(sym))
-                               goto next_menu;
+                               continue;
                        /* If symbol equals to default value - skip */
                        if (strcmp(sym_get_string_value(sym), sym_get_string_default(sym)) == 0)
-                               goto next_menu;
+                               continue;
 
                        /*
                         * If symbol is a choice value and equals to the
@@ -827,25 +823,11 @@ int conf_write_defconfig(const char *filename)
                                if (!sym_is_optional(cs) && sym == ds) {
                                        if ((sym->type == S_BOOLEAN) &&
                                            sym_get_tristate_value(sym) == yes)
-                                               goto next_menu;
+                                               continue;
                                }
                        }
                        print_symbol_for_dotconfig(out, sym);
                }
-next_menu:
-               if (menu->list != NULL) {
-                       menu = menu->list;
-               }
-               else if (menu->next != NULL) {
-                       menu = menu->next;
-               } else {
-                       while ((menu = menu->parent)) {
-                               if (menu->next != NULL) {
-                                       menu = menu->next;
-                                       break;
-                               }
-                       }
-               }
        }
        fclose(out);
        return 0;
index 7fb996612c966075883d945f4a8174653f025d66..8f339b47fe8da14cf838351f23a8efde343ecf69 100644 (file)
@@ -517,20 +517,9 @@ void conf_parse(const char *name)
 
        menu_finalize();
 
-       menu = &rootmenu;
-       while (menu) {
+       menu_for_each_entry(menu) {
                if (menu->sym && sym_check_deps(menu->sym))
                        yynerrs++;
-
-               if (menu->list) {
-                       menu = menu->list;
-                       continue;
-               }
-
-               while (!menu->next && menu->parent)
-                       menu = menu->parent;
-
-               menu = menu->next;
        }
 
        if (yynerrs)