1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- ---
- confdata.c | 22 +++++++++++++++++++---
- 1 file changed, 19 insertions(+), 3 deletions(-)
- Index: config/confdata.c
- ===================================================================
- --- config.orig/confdata.c
- +++ config/confdata.c
- @@ -996,7 +996,16 @@
- void conf_set_all_new_symbols(enum conf_def_mode mode)
- {
- struct symbol *sym, *csym;
- - int i, cnt;
- + int i, cnt, prob = 50;
- +
- + if (mode == def_random) {
- + char *endp, *env = getenv("KCONFIG_PROBABILITY");
- + if (env && *env) {
- + int tmp = (int)strtol(env, &endp, 10);
- + if (*endp == '\0' && tmp >= 0 && tmp <= 100)
- + prob = tmp;
- + }
- + }
-
- for_all_symbols(i, sym) {
- if (sym_has_value(sym))
- @@ -1015,8 +1024,15 @@
- sym->def[S_DEF_USER].tri = no;
- break;
- case def_random:
- - cnt = sym_get_type(sym) == S_TRISTATE ? 3 : 2;
- - sym->def[S_DEF_USER].tri = (tristate)(rand() % cnt);
- + cnt = (rand() % 100) - (100 - prob);
- + if (cnt < 0)
- + sym->def[S_DEF_USER].tri = no;
- + else
- + if ((sym_get_type(sym) == S_TRISTATE)
- + && (cnt > prob/2))
- + sym->def[S_DEF_USER].tri = mod;
- + else
- + sym->def[S_DEF_USER].tri = yes;
- break;
- default:
- continue;
|