projects
/
carl9170fw.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
kconfig: do not write choice values when their dependency becomes n
[carl9170fw.git]
/
config
/
symbol.c
diff --git
a/config/symbol.c
b/config/symbol.c
index 35e0937aa6a6fd3b47f15974f6df121c41c55488..13f7fdfe328dc36daf8f958da879be0e665c0a67 100644
(file)
--- a/
config/symbol.c
+++ b/
config/symbol.c
@@
-77,7
+77,7
@@
const char *sym_type_name(enum symbol_type type)
{
switch (type) {
case S_BOOLEAN:
{
switch (type) {
case S_BOOLEAN:
- return "bool
ean
";
+ return "bool";
case S_TRISTATE:
return "tristate";
case S_INT:
case S_TRISTATE:
return "tristate";
case S_INT:
@@
-371,11
+371,13
@@
void sym_calc_value(struct symbol *sym)
sym->curr.tri = no;
return;
}
sym->curr.tri = no;
return;
}
- if (!sym_is_choice_value(sym))
- sym->flags &= ~SYMBOL_WRITE;
+ sym->flags &= ~SYMBOL_WRITE;
sym_calc_visibility(sym);
sym_calc_visibility(sym);
+ if (sym->visible != no)
+ sym->flags |= SYMBOL_WRITE;
+
/* set default if recursively called */
sym->curr = newval;
/* set default if recursively called */
sym->curr = newval;
@@
-390,7
+392,6
@@
void sym_calc_value(struct symbol *sym)
/* if the symbol is visible use the user value
* if available, otherwise try the default value
*/
/* if the symbol is visible use the user value
* if available, otherwise try the default value
*/
- sym->flags |= SYMBOL_WRITE;
if (sym_has_value(sym)) {
newval.tri = EXPR_AND(sym->def[S_DEF_USER].tri,
sym->visible);
if (sym_has_value(sym)) {
newval.tri = EXPR_AND(sym->def[S_DEF_USER].tri,
sym->visible);
@@
-433,12
+434,9
@@
void sym_calc_value(struct symbol *sym)
case S_STRING:
case S_HEX:
case S_INT:
case S_STRING:
case S_HEX:
case S_INT:
- if (sym->visible != no) {
- sym->flags |= SYMBOL_WRITE;
- if (sym_has_value(sym)) {
- newval.val = sym->def[S_DEF_USER].val;
- break;
- }
+ if (sym->visible != no && sym_has_value(sym)) {
+ newval.val = sym->def[S_DEF_USER].val;
+ break;
}
prop = sym_get_default_prop(sym);
if (prop) {
}
prop = sym_get_default_prop(sym);
if (prop) {
@@
-907,6
+905,10
@@
const char *sym_expand_string_value(const char *in)
char *res;
size_t reslen;
char *res;
size_t reslen;
+ /*
+ * Note: 'in' might come from a token that's about to be
+ * freed, so make sure to always allocate a new string
+ */
reslen = strlen(in) + 1;
res = xmalloc(reslen);
res[0] = '\0';
reslen = strlen(in) + 1;
res = xmalloc(reslen);
res[0] = '\0';