kconfig: add more S_INT and S_HEX consistency checks

This patch add more number consistency checkg, trying to catch the following
situation:

config FOO0
	hex
	default 42

config FOO1
	string

config BAR0
	int
	default FOO1

config BAR1
	hex
	default FOO1

config FOO2
	hex
	default 42h

config FOO3
	int
	default "1bar"

Signed-off-by: Arnaud Lacombe <lacombar@gmail.com>
Signed-off-by: Michal Marek <mmarek@suse.cz>
This commit is contained in:
Arnaud Lacombe 2010-12-05 01:29:25 -05:00 committed by Michal Marek
parent 4ce2c1e8e8
commit ab60bd0b92

View File

@ -183,7 +183,7 @@ void menu_add_option(int token, char *arg)
} }
} }
static int menu_range_valid_sym(struct symbol *sym, struct symbol *sym2) static int menu_validate_number(struct symbol *sym, struct symbol *sym2)
{ {
return sym2->type == S_INT || sym2->type == S_HEX || return sym2->type == S_INT || sym2->type == S_HEX ||
(sym2->type == S_UNKNOWN && sym_string_valid(sym, sym2->name)); (sym2->type == S_UNKNOWN && sym_string_valid(sym, sym2->name));
@ -201,6 +201,15 @@ static void sym_check_prop(struct symbol *sym)
prop_warn(prop, prop_warn(prop,
"default for config symbol '%s'" "default for config symbol '%s'"
" must be a single symbol", sym->name); " must be a single symbol", sym->name);
if (prop->expr->type != E_SYMBOL)
break;
sym2 = prop_get_symbol(prop);
if (sym->type == S_HEX || sym->type == S_INT) {
if (!menu_validate_number(sym, sym2))
prop_warn(prop,
"'%s': number is invalid",
sym->name);
}
break; break;
case P_SELECT: case P_SELECT:
sym2 = prop_get_symbol(prop); sym2 = prop_get_symbol(prop);
@ -220,8 +229,8 @@ static void sym_check_prop(struct symbol *sym)
if (sym->type != S_INT && sym->type != S_HEX) if (sym->type != S_INT && sym->type != S_HEX)
prop_warn(prop, "range is only allowed " prop_warn(prop, "range is only allowed "
"for int or hex symbols"); "for int or hex symbols");
if (!menu_range_valid_sym(sym, prop->expr->left.sym) || if (!menu_validate_number(sym, prop->expr->left.sym) ||
!menu_range_valid_sym(sym, prop->expr->right.sym)) !menu_validate_number(sym, prop->expr->right.sym))
prop_warn(prop, "range is invalid"); prop_warn(prop, "range is invalid");
break; break;
default: default: