kconfig: fix savedefconfig with choice marked optional
savedefconfig failed to save the correct minimal config when it encountered a choice marked optional. Consider following minimal configuration: $cat Kconfig choice prompt "choice" optional config A bool "a" config B bool "b" endchoice $cat .config | grep -v ^# CONFIG_A=y $conf --savedefconfig=defconfig Kconfig would before this fix result in an empty file, because kconfig would assume that CONFIG_A=y is a default value. But because the choice is optional the default is that both A and B are =n. Fix so we handle optional choices correct. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: Michal Marek <mmarek@suse.cz>
This commit is contained in:
Родитель
4418a2b904
Коммит
84062dd3a6
|
@ -497,7 +497,9 @@ int conf_write_defconfig(const char *filename)
|
|||
/*
|
||||
* If symbol is a choice value and equals to the
|
||||
* default for a choice - skip.
|
||||
* But only if value is bool and equal to "y" .
|
||||
* But only if value is bool and equal to "y" and
|
||||
* choice is not "optional".
|
||||
* (If choice is "optional" then all values can be "n")
|
||||
*/
|
||||
if (sym_is_choice_value(sym)) {
|
||||
struct symbol *cs;
|
||||
|
@ -505,7 +507,7 @@ int conf_write_defconfig(const char *filename)
|
|||
|
||||
cs = prop_get_symbol(sym_get_choice_prop(sym));
|
||||
ds = sym_choice_default(cs);
|
||||
if (sym == ds) {
|
||||
if (!sym_is_optional(cs) && sym == ds) {
|
||||
if ((sym->type == S_BOOLEAN) &&
|
||||
sym_get_tristate_value(sym) == yes)
|
||||
goto next_menu;
|
||||
|
|
Загрузка…
Ссылка в новой задаче