vmod: Pass xkb_desc explicitly to vmod functions Some error paths don't set info->xkb correctly, so just do like most utility functions and pass the xkb_desc explicitly. Signed-off-by: Daniel Stone <daniel@fooishbar.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
diff --git a/src/xkbcomp/compat.c b/src/xkbcomp/compat.c
index 8749b5b..bad5cc2 100644
--- a/src/xkbcomp/compat.c
+++ b/src/xkbcomp/compat.c
@@ -515,7 +515,7 @@ SetInterpField(SymInterpInfo * si,
{
if (arrayNdx != NULL)
return ReportSINotArray(si, field, info);
- ok = ResolveVirtualModifier(value, &tmp, &info->vmods);
+ ok = ResolveVirtualModifier(value, xkb, &tmp, &info->vmods);
if (ok)
{
si->interp.virtual_mod = tmp.uval;
@@ -765,7 +765,7 @@ HandleCompatMapFile(XkbFile * file,
info->errorCount++;
break;
case StmtVModDef:
- if (!HandleVModDef((VModDef *) stmt, merge, &info->vmods))
+ if (!HandleVModDef((VModDef *) stmt, xkb, merge, &info->vmods))
info->errorCount++;
break;
case StmtKeycodeDef:
diff --git a/src/xkbcomp/keytypes.c b/src/xkbcomp/keytypes.c
index d83f5c3..b19d7bd 100644
--- a/src/xkbcomp/keytypes.c
+++ b/src/xkbcomp/keytypes.c
@@ -1068,7 +1068,7 @@ HandleKeyTypesFile(XkbFile * file,
info->errorCount++;
break;
case StmtVModDef: /* virtual_modifiers NumLock, ... */
- if (!HandleVModDef((VModDef *) stmt, merge, &info->vmods))
+ if (!HandleVModDef((VModDef *) stmt, xkb, merge, &info->vmods))
info->errorCount++;
break;
case StmtKeyAliasDef:
diff --git a/src/xkbcomp/symbols.c b/src/xkbcomp/symbols.c
index 72bd020..2de160c 100644
--- a/src/xkbcomp/symbols.c
+++ b/src/xkbcomp/symbols.c
@@ -1683,7 +1683,7 @@ HandleSymbolsFile(XkbFile * file,
info->errorCount++;
break;
case StmtVModDef:
- if (!HandleVModDef((VModDef *) stmt, merge, &info->vmods))
+ if (!HandleVModDef((VModDef *) stmt, xkb, merge, &info->vmods))
info->errorCount++;
break;
case StmtInterpDef:
diff --git a/src/xkbcomp/vmod.c b/src/xkbcomp/vmod.c
index 7b0017b..82004e6 100644
--- a/src/xkbcomp/vmod.c
+++ b/src/xkbcomp/vmod.c
@@ -79,15 +79,16 @@ ClearVModInfo(VModInfo * info, struct xkb_desc * xkb)
* @param mergeMode Merge strategy (e.g. MergeOverride)
*/
Bool
-HandleVModDef(VModDef * stmt, unsigned mergeMode, VModInfo * info)
+HandleVModDef(VModDef * stmt, struct xkb_desc *xkb, unsigned mergeMode,
+ VModInfo * info)
{
register int i, bit, nextFree;
ExprResult mod;
struct xkb_server_map * srv;
struct xkb_names * names;
- srv = info->xkb->server;
- names = info->xkb->names;
+ srv = xkb->server;
+ names = xkb->names;
for (i = 0, bit = 1, nextFree = -1; i < XkbNumVirtualMods; i++, bit <<= 1)
{
if (info->defined & bit)
@@ -228,11 +229,12 @@ FindKeypadVMod(struct xkb_desc * xkb)
}
Bool
-ResolveVirtualModifier(ExprDef * def, ExprResult * val_rtrn, VModInfo * info)
+ResolveVirtualModifier(ExprDef * def, struct xkb_desc *xkb,
+ ExprResult * val_rtrn, VModInfo * info)
{
struct xkb_names * names;
- names = info->xkb->names;
+ names = xkb->names;
if (def->op == ExprIdent)
{
int i, bit;
diff --git a/src/xkbcomp/vmod.h b/src/xkbcomp/vmod.h
index e8833fc..1e0bb5c 100644
--- a/src/xkbcomp/vmod.h
+++ b/src/xkbcomp/vmod.h
@@ -45,6 +45,7 @@ extern void ClearVModInfo(VModInfo * /* info */ ,
);
extern Bool HandleVModDef(VModDef * /* stmt */ ,
+ struct xkb_desc * /* xkb */ ,
unsigned /* mergeMode */ ,
VModInfo * /* info */
);
@@ -64,6 +65,7 @@ extern int FindKeypadVMod(struct xkb_desc * /* xkb */
);
extern Bool ResolveVirtualModifier(ExprDef * /* def */ ,
+ struct xkb_desc * /* xkb */ ,
ExprResult * /* value_rtrn */ ,
VModInfo * /* info */
);