diff options
Diffstat (limited to 'scripts/kconfig/confdata.c')
| -rw-r--r-- | scripts/kconfig/confdata.c | 46 | 
1 files changed, 13 insertions, 33 deletions
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c index 0e35c4819cf1..387503daf0f7 100644 --- a/scripts/kconfig/confdata.c +++ b/scripts/kconfig/confdata.c @@ -502,7 +502,7 @@ int conf_read(const char *name)  	for_all_symbols(sym) {  		sym_calc_value(sym); -		if (sym_is_choice(sym) || (sym->flags & SYMBOL_NO_WRITE)) +		if (sym_is_choice(sym))  			continue;  		if (sym_has_value(sym) && (sym->flags & SYMBOL_WRITE)) {  			/* check that calculated value agrees with saved value */ @@ -793,59 +793,39 @@ int conf_write_defconfig(const char *filename)  	sym_clear_all_valid(); -	/* Traverse all menus to find all relevant symbols */ -	menu = rootmenu.list; +	menu_for_each_entry(menu) { +		struct menu *choice; -	while (menu != NULL) -	{  		sym = menu->sym;  		if (sym && !sym_is_choice(sym)) {  			sym_calc_value(sym);  			if (!(sym->flags & SYMBOL_WRITE)) -				goto next_menu; +				continue;  			sym->flags &= ~SYMBOL_WRITE;  			/* If we cannot change the symbol - skip */  			if (!sym_is_changeable(sym)) -				goto next_menu; +				continue;  			/* If symbol equals to default value - skip */  			if (strcmp(sym_get_string_value(sym), sym_get_string_default(sym)) == 0) -				goto next_menu; +				continue;  			/*  			 * 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" and -			 * choice is not "optional". -			 * (If choice is "optional" then all values can be "n")  			 */ -			if (sym_is_choice_value(sym)) { -				struct symbol *cs; +			choice = sym_get_choice_menu(sym); +			if (choice) {  				struct symbol *ds; -				cs = prop_get_symbol(sym_get_choice_prop(sym)); -				ds = sym_choice_default(cs); -				if (!sym_is_optional(cs) && sym == ds) { +				ds = sym_choice_default(choice->sym); +				if (sym == ds) {  					if ((sym->type == S_BOOLEAN) &&  					    sym_get_tristate_value(sym) == yes) -						goto next_menu; +						continue;  				}  			}  			print_symbol_for_dotconfig(out, sym);  		} -next_menu: -		if (menu->list != NULL) { -			menu = menu->list; -		} -		else if (menu->next != NULL) { -			menu = menu->next; -		} else { -			while ((menu = menu->parent)) { -				if (menu->next != NULL) { -					menu = menu->next; -					break; -				} -			} -		}  	}  	fclose(out);  	return 0; @@ -906,7 +886,7 @@ int conf_write(const char *name)  				     "# %s\n"  				     "#\n", str);  			need_newline = false; -		} else if (!(sym->flags & SYMBOL_CHOICE) && +		} else if (!sym_is_choice(sym) &&  			   !(sym->flags & SYMBOL_WRITTEN)) {  			sym_calc_value(sym);  			if (!(sym->flags & SYMBOL_WRITE)) @@ -1028,7 +1008,7 @@ static int conf_touch_deps(void)  	for_all_symbols(sym) {  		sym_calc_value(sym); -		if ((sym->flags & SYMBOL_NO_WRITE) || !sym->name) +		if (sym_is_choice(sym))  			continue;  		if (sym->flags & SYMBOL_WRITE) {  			if (sym->flags & SYMBOL_DEF_AUTO) {  |