Messages in this thread Patch in this message |  | | | Date | Sat, 12 Jul 2003 17:30:18 +1000 | | Subject | [KCONFIG] Optional choice values always get reset | | From | Herbert Xu <> |
| |
Hi:
As of 2.5.74, make oldconfig always disables existing optional choices even if they were selected previously. For example, if all the EICON ISDN drivers were selected as modules, then make oldconfig will turn them off.
Part of the problem is that the choice value itself is computed before the SYMBOL_NEW flag is turned off. This patch addresses that particular problem.
Cheers, -- Debian GNU/Linux 3.0 is out! ( http://www.debian.org/ ) Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txtIndex: kernel-source-2.5/scripts/kconfig/confdata.c =================================================================== RCS file: /home/gondolin/herbert/src/CVS/debian/kernel-source-2.5/scripts/kconfig/confdata.c,v retrieving revision 1.1.1.3 diff -u -r1.1.1.3 confdata.c --- kernel-source-2.5/scripts/kconfig/confdata.c 17 Jun 2003 04:20:26 -0000 1.1.1.3 +++ kernel-source-2.5/scripts/kconfig/confdata.c 12 Jul 2003 07:24:35 -0000 @@ -149,7 +149,7 @@ sym = sym_find(line + 7); if (!sym) { fprintf(stderr, "%s:%d: trying to assign nonexistent symbol %s\n", name, lineno, line + 7); - break; + continue; } switch (sym->type) { case S_TRISTATE: @@ -197,29 +197,28 @@ default: ; } - if (sym_is_choice_value(sym)) { - struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym)); - switch (sym->user.tri) { - case mod: - if (cs->user.tri == yes) - /* warn? */; - break; - case yes: - if (cs->user.tri != no) - /* warn? */; - cs->user.val = sym; - break; - case no: - break; - } - cs->user.tri = sym->user.tri; - } - break; - case '\n': break; default: continue; } + if (sym_is_choice_value(sym)) { + struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym)); + switch (sym->user.tri) { + case mod: + if (cs->user.tri == yes) + /* warn? */; + break; + case yes: + if (cs->user.tri != no) + /* warn? */; + cs->user.val = sym; + break; + case no: + break; + } + cs->user.tri = E_OR(cs->user.tri, sym->user.tri); + cs->flags &= ~SYMBOL_NEW; + } } fclose(in); @@ -241,7 +240,6 @@ if (!sym_is_choice(sym)) continue; prop = sym_get_choice_prop(sym); - sym->flags &= ~SYMBOL_NEW; for (e = prop->expr; e; e = e->left.expr) if (e->right.sym->visible != no) sym->flags |= e->right.sym->flags & SYMBOL_NEW; |  |