Skip to content

Commit

Permalink
[PATCH] kconfig: fix restart for choice symbols
Browse files Browse the repository at this point in the history
The restart check whether new symbols became visible, didn't always work for
choice symbols.  Even if a choice symbol itself isn't changable, the childs
are.  This also requires to update the new status of all choice values, once
one of them is set.

Signed-off-by: Roman Zippel <zippel@linux-m68k.org>
Cc: Sam Ravnborg <sam@ravnborg.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Roman Zippel authored and Linus Torvalds committed Nov 9, 2005
1 parent 3f04e7d commit 3f23ca2
Showing 2 changed files with 14 additions and 4 deletions.
7 changes: 3 additions & 4 deletions scripts/kconfig/conf.c
Original file line number Diff line number Diff line change
@@ -467,15 +467,14 @@ static void check_conf(struct menu *menu)
return;

sym = menu->sym;
if (sym) {
if (sym_is_changable(sym) && !sym_has_value(sym)) {
if (sym && !sym_has_value(sym)) {
if (sym_is_changable(sym) ||
(sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {
if (!conf_cnt++)
printf(_("*\n* Restart config...\n*\n"));
rootEntry = menu_get_parent_menu(menu);
conf(rootEntry);
}
if (sym_is_choice(sym) && sym_get_tristate_value(sym) != mod)
return;
}

for (child = menu->list; child; child = child->next)
11 changes: 11 additions & 0 deletions scripts/kconfig/symbol.c
Original file line number Diff line number Diff line change
@@ -380,11 +380,22 @@ bool sym_set_tristate_value(struct symbol *sym, tristate val)
sym->flags &= ~SYMBOL_NEW;
sym_set_changed(sym);
}
/*
* setting a choice value also resets the new flag of the choice
* symbol and all other choice values.
*/
if (sym_is_choice_value(sym) && val == yes) {
struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym));
struct property *prop;
struct expr *e;

cs->user.val = sym;
cs->flags &= ~SYMBOL_NEW;
prop = sym_get_choice_prop(cs);
for (e = prop->expr; e; e = e->left.expr) {
if (e->right.sym->visible != no)
e->right.sym->flags &= ~SYMBOL_NEW;
}
}

sym->user.tri = val;

0 comments on commit 3f23ca2

Please sign in to comment.