summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter@cs.unisa.edu.au>2008-04-13 15:42:33 +0930
committerPeter Hutterer <peter@cs.unisa.edu.au>2008-04-13 16:28:31 +0930
commit6faf5b97b92953c331d6540ceb18fd0a77197fea (patch)
tree92c9227354d742956c0f9dd38550d83f4411bd4b
parent3106ba1116e3b9d893f66a93e4a91cc61e23226a (diff)
Xi: fix up modifierKeyMap copying.
Setting it to NULL isn't correct either. The correct behaviour is to realloc it to the size necessary (or newly alloc it/free it). Otherwise we have a memleak.
-rw-r--r--Xi/exevents.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/Xi/exevents.c b/Xi/exevents.c
index 6fa08d133..cf0e8984b 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -176,11 +176,16 @@ CopyKeyClass(DeviceIntPtr device, DeviceIntPtr master)
if (dk->maxKeysPerModifier)
{
- mk->modifierKeyMap = xcalloc(8, dk->maxKeysPerModifier);
+ mk->modifierKeyMap = xrealloc(mk->modifierKeyMap,
+ 8 * dk->maxKeysPerModifier);
if (!mk->modifierKeyMap)
FatalError("[Xi] no memory for class shift.\n");
memcpy(mk->modifierKeyMap, dk->modifierKeyMap,
(8 * dk->maxKeysPerModifier));
+ } else
+ {
+ xfree(mk->modifierKeyMap);
+ mk->modifierKeyMap = NULL;
}
mk->maxKeysPerModifier = dk->maxKeysPerModifier;
@@ -439,7 +444,6 @@ DeepCopyDeviceClasses(DeviceIntPtr from, DeviceIntPtr to)
#ifdef XKB
to->key->xkbInfo = NULL;
#endif
- to->key->modifierKeyMap = NULL;
to->key->curKeySyms.map = NULL;
CopyKeyClass(from, to);
} else if (to->key && !from->key)