kconfig: fix savedefconfig for tristate choices
Sam Ravnborg [Thu, 12 Aug 2010 07:11:51 +0000 (09:11 +0200)]
savedefconfig failed to save choice symbols equal to 'y'
for tristate choices.
This resulted in this value being lost.

In particular is fixes an issue where

make ARCH=avr32 atngw100_defconfig
make ARCH=avr32 savedefconfig
cp defconfig arch/avr32/configs/atngw100_defconfig
make ARCH=avr32 atngw100_defconfig
diff -u .config .config.old

failed to produce an identical .config.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Signed-off-by: Michal Marek <mmarek@suse.cz>

scripts/kconfig/confdata.c

index f81f263..e5d66e4 100644 (file)
@@ -497,7 +497,7 @@ 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 equal to "y".
+                        * But only if value is bool and equal to "y" .
                         */
                        if (sym_is_choice_value(sym)) {
                                struct symbol *cs;
@@ -506,9 +506,8 @@ 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->type == S_BOOLEAN ||
-                                       sym->type == S_TRISTATE) &&
-                                       sym_get_tristate_value(sym) == yes)
+                                       if ((sym->type == S_BOOLEAN) &&
+                                           sym_get_tristate_value(sym) == yes)
                                                goto next_menu;
                                }
                        }