diff options
author | Sam Ravnborg <sam@ravnborg.org> | 2010-08-14 23:22:16 +0200 |
---|---|---|
committer | Michal Marek <mmarek@suse.cz> | 2010-08-15 00:32:12 +0200 |
commit | 84062dd3a6a045395a43de1d9adc9b8eb2d1426e (patch) | |
tree | 708038ff4d462f87fe6d3a26a99266172d9afd90 /scripts | |
parent | 4418a2b904805814bbd14b555d6add6a175f49f3 (diff) | |
download | linux-3.10-84062dd3a6a045395a43de1d9adc9b8eb2d1426e.tar.gz linux-3.10-84062dd3a6a045395a43de1d9adc9b8eb2d1426e.tar.bz2 linux-3.10-84062dd3a6a045395a43de1d9adc9b8eb2d1426e.zip |
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>
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/kconfig/confdata.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c index c39327e60ea..515253fe46c 100644 --- a/scripts/kconfig/confdata.c +++ b/scripts/kconfig/confdata.c @@ -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; |