ExprResolveLevel(ExprDef * expr,
ExprResult * val_rtrn)
{
+ int ret;
static LookupEntry level_names[] = {
{ "level1", 1 },
{ "level2", 2 },
{ NULL, 0 }
};
- return ExprResolveIntegerLookup(expr, val_rtrn, SimpleLookup,
- level_names);
+ ret = ExprResolveIntegerLookup(expr, val_rtrn, SimpleLookup, level_names);
+ if (ret == False)
+ return ret;
+
+ if (val_rtrn->ival < 1 || val_rtrn->ival > XkbMaxShiftLevel) {
+ ERROR("Shift level %d is out of range (1..%d)\n", val_rtrn->ival,
+ XkbMaxShiftLevel);
+ return False;
+ }
+
+ return True;
}
int
ACTION("Ignoring malformed level specification\n");
return False;
}
- if ((rtrn.ival < 1) || (rtrn.ival > XkbMaxShiftLevel + 1))
- {
- ERROR("Shift level %d out of range (1..%d) in key type %s\n",
- XkbMaxShiftLevel + 1, rtrn.ival, TypeTxt(type));
- ACTION("Ignoring illegal definition of map[%s]\n",
- MapEntryTxt(xkb, &entry));
- return False;
- }
entry.level = rtrn.ival - 1;
return AddMapEntry(xkb, type, &entry, True, True);
}
return ReportTypeShouldBeArray(type, "level name");
if (!ExprResolveLevel(arrayNdx, &rtrn))
return ReportTypeBadType(type, "level name", "integer");
- if ((rtrn.ival < 1) || (rtrn.ival > XkbMaxShiftLevel + 1))
- {
- ERROR("Level name %d out of range (1..%d) in key type %s\n",
- rtrn.ival,
- XkbMaxShiftLevel + 1,
- XkbcAtomText(type->name));
- ACTION("Ignoring illegal level name definition\n");
- return False;
- }
level = rtrn.ival - 1;
if (!ExprResolveString(value, &rtrn))
{