diff options
author | Peter Hutterer <peter@cs.unisa.edu.au> | 2008-04-13 15:42:33 +0930 |
---|---|---|
committer | Peter Hutterer <peter@cs.unisa.edu.au> | 2008-04-13 16:28:31 +0930 |
commit | 6faf5b97b92953c331d6540ceb18fd0a77197fea (patch) | |
tree | 92c9227354d742956c0f9dd38550d83f4411bd4b | |
parent | 3106ba1116e3b9d893f66a93e4a91cc61e23226a (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.c | 8 |
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) |