kconfig: move prompt handling to menu_add_prompt() from menu_add_prop()
[carl9170fw.git] / config / menu.c
index 4cf15d449c05d2a126d0a3fa9af592068b8ff5d7..45daece8d9834127055f90b855b575bef7b48a52 100644 (file)
@@ -1,6 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
  */
 
 #include <ctype.h>
@@ -132,53 +132,51 @@ static struct property *menu_add_prop(enum prop_type type, char *prompt, struct
        prop->expr = expr;
        prop->visible.expr = dep;
 
-       if (prompt) {
-               if (isspace(*prompt)) {
-                       prop_warn(prop, "leading whitespace ignored");
-                       while (isspace(*prompt))
-                               prompt++;
-               }
-               if (current_entry->prompt && current_entry != &rootmenu)
-                       prop_warn(prop, "prompt redefined");
+       return prop;
+}
 
-               /* Apply all upper menus' visibilities to actual prompts. */
-               if(type == P_PROMPT) {
-                       struct menu *menu = current_entry;
+struct property *menu_add_prompt(enum prop_type type, char *prompt,
+                                struct expr *dep)
+{
+       struct property *prop = menu_add_prop(type, prompt, NULL, dep);
 
-                       while ((menu = menu->parent) != NULL) {
-                               struct expr *dup_expr;
+       if (isspace(*prompt)) {
+               prop_warn(prop, "leading whitespace ignored");
+               while (isspace(*prompt))
+                       prompt++;
+       }
+       if (current_entry->prompt)
+               prop_warn(prop, "prompt redefined");
 
-                               if (!menu->visibility)
-                                       continue;
-                               /*
-                                * Do not add a reference to the
-                                * menu's visibility expression but
-                                * use a copy of it.  Otherwise the
-                                * expression reduction functions
-                                * will modify expressions that have
-                                * multiple references which can
-                                * cause unwanted side effects.
-                                */
-                               dup_expr = expr_copy(menu->visibility);
+       /* Apply all upper menus' visibilities to actual prompts. */
+       if (type == P_PROMPT) {
+               struct menu *menu = current_entry;
 
-                               prop->visible.expr
-                                       = expr_alloc_and(prop->visible.expr,
-                                                        dup_expr);
-                       }
-               }
+               while ((menu = menu->parent) != NULL) {
+                       struct expr *dup_expr;
 
-               current_entry->prompt = prop;
+                       if (!menu->visibility)
+                               continue;
+                       /*
+                        * Do not add a reference to the menu's visibility
+                        * expression but use a copy of it. Otherwise the
+                        * expression reduction functions will modify
+                        * expressions that have multiple references which
+                        * can cause unwanted side effects.
+                        */
+                       dup_expr = expr_copy(menu->visibility);
+
+                       prop->visible.expr = expr_alloc_and(prop->visible.expr,
+                                                           dup_expr);
+               }
        }
+
+       current_entry->prompt = prop;
        prop->text = prompt;
 
        return prop;
 }
 
-struct property *menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep)
-{
-       return menu_add_prop(type, prompt, NULL, dep);
-}
-
 void menu_add_visibility(struct expr *expr)
 {
        current_entry->visibility = expr_alloc_and(current_entry->visibility,
@@ -195,29 +193,26 @@ void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep)
        menu_add_prop(type, NULL, expr_alloc_symbol(sym), dep);
 }
 
-void menu_add_option(int token, char *arg)
+void menu_add_option_modules(void)
 {
-       switch (token) {
-       case T_OPT_MODULES:
-               if (modules_sym)
-                       zconf_error("symbol '%s' redefines option 'modules'"
-                                   " already defined by symbol '%s'",
-                                   current_entry->sym->name,
-                                   modules_sym->name
-                                   );
-               modules_sym = current_entry->sym;
-               break;
-       case T_OPT_DEFCONFIG_LIST:
-               if (!sym_defconfig_list)
-                       sym_defconfig_list = current_entry->sym;
-               else if (sym_defconfig_list != current_entry->sym)
-                       zconf_error("trying to redefine defconfig symbol");
-               sym_defconfig_list->flags |= SYMBOL_NO_WRITE;
-               break;
-       case T_OPT_ALLNOCONFIG_Y:
-               current_entry->sym->flags |= SYMBOL_ALLNOCONFIG_Y;
-               break;
-       }
+       if (modules_sym)
+               zconf_error("symbol '%s' redefines option 'modules' already defined by symbol '%s'",
+                           current_entry->sym->name, modules_sym->name);
+       modules_sym = current_entry->sym;
+}
+
+void menu_add_option_defconfig_list(void)
+{
+       if (!sym_defconfig_list)
+               sym_defconfig_list = current_entry->sym;
+       else if (sym_defconfig_list != current_entry->sym)
+               zconf_error("trying to redefine defconfig symbol");
+       sym_defconfig_list->flags |= SYMBOL_NO_WRITE;
+}
+
+void menu_add_option_allnoconfig_y(void)
+{
+       current_entry->sym->flags |= SYMBOL_ALLNOCONFIG_Y;
 }
 
 static int menu_validate_number(struct symbol *sym, struct symbol *sym2)
@@ -329,12 +324,10 @@ void menu_finalize(struct menu *parent)
                         * choice value symbols.
                         */
                        parentdep = expr_alloc_symbol(sym);
-               } else if (parent->prompt)
-                       /* Menu node for 'menu' */
-                       parentdep = parent->prompt->visible.expr;
-               else
-                       /* Menu node for 'if' */
+               } else {
+                       /* Menu node for 'menu', 'if' */
                        parentdep = parent->dep;
+               }
 
                /* For each child menu node... */
                for (menu = parent->list; menu; menu = menu->next) {