diff options
Diffstat (limited to 'scripts/kconfig/confdata.c')
-rw-r--r-- | scripts/kconfig/confdata.c | 26 |
1 files changed, 6 insertions, 20 deletions
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c index 7c7a5a6cc3f5..0586085136d1 100644 --- a/scripts/kconfig/confdata.c +++ b/scripts/kconfig/confdata.c | |||
@@ -344,10 +344,8 @@ setsym: | |||
344 | 344 | ||
345 | int conf_read(const char *name) | 345 | int conf_read(const char *name) |
346 | { | 346 | { |
347 | struct symbol *sym, *choice_sym; | 347 | struct symbol *sym; |
348 | struct property *prop; | 348 | int i; |
349 | struct expr *e; | ||
350 | int i, flags; | ||
351 | 349 | ||
352 | sym_set_change_count(0); | 350 | sym_set_change_count(0); |
353 | 351 | ||
@@ -357,7 +355,7 @@ int conf_read(const char *name) | |||
357 | for_all_symbols(i, sym) { | 355 | for_all_symbols(i, sym) { |
358 | sym_calc_value(sym); | 356 | sym_calc_value(sym); |
359 | if (sym_is_choice(sym) || (sym->flags & SYMBOL_AUTO)) | 357 | if (sym_is_choice(sym) || (sym->flags & SYMBOL_AUTO)) |
360 | goto sym_ok; | 358 | continue; |
361 | if (sym_has_value(sym) && (sym->flags & SYMBOL_WRITE)) { | 359 | if (sym_has_value(sym) && (sym->flags & SYMBOL_WRITE)) { |
362 | /* check that calculated value agrees with saved value */ | 360 | /* check that calculated value agrees with saved value */ |
363 | switch (sym->type) { | 361 | switch (sym->type) { |
@@ -366,30 +364,18 @@ int conf_read(const char *name) | |||
366 | if (sym->def[S_DEF_USER].tri != sym_get_tristate_value(sym)) | 364 | if (sym->def[S_DEF_USER].tri != sym_get_tristate_value(sym)) |
367 | break; | 365 | break; |
368 | if (!sym_is_choice(sym)) | 366 | if (!sym_is_choice(sym)) |
369 | goto sym_ok; | 367 | continue; |
370 | /* fall through */ | 368 | /* fall through */ |
371 | default: | 369 | default: |
372 | if (!strcmp(sym->curr.val, sym->def[S_DEF_USER].val)) | 370 | if (!strcmp(sym->curr.val, sym->def[S_DEF_USER].val)) |
373 | goto sym_ok; | 371 | continue; |
374 | break; | 372 | break; |
375 | } | 373 | } |
376 | } else if (!sym_has_value(sym) && !(sym->flags & SYMBOL_WRITE)) | 374 | } else if (!sym_has_value(sym) && !(sym->flags & SYMBOL_WRITE)) |
377 | /* no previous value and not saved */ | 375 | /* no previous value and not saved */ |
378 | goto sym_ok; | 376 | continue; |
379 | conf_unsaved++; | 377 | conf_unsaved++; |
380 | /* maybe print value in verbose mode... */ | 378 | /* maybe print value in verbose mode... */ |
381 | sym_ok: | ||
382 | if (!sym_is_choice(sym)) | ||
383 | continue; | ||
384 | /* The choice symbol only has a set value (and thus is not new) | ||
385 | * if all its visible childs have values. | ||
386 | */ | ||
387 | prop = sym_get_choice_prop(sym); | ||
388 | flags = sym->flags; | ||
389 | expr_list_for_each_sym(prop->expr, e, choice_sym) | ||
390 | if (choice_sym->visible != no) | ||
391 | flags &= choice_sym->flags; | ||
392 | sym->flags &= flags | ~SYMBOL_DEF_USER; | ||
393 | } | 379 | } |
394 | 380 | ||
395 | for_all_symbols(i, sym) { | 381 | for_all_symbols(i, sym) { |