From 83926cb8bef6288b89e801c5e60b3f40e923e16e Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 15 Nov 2007 17:41:07 +1030 Subject: [PATCH] Xi: Only alloc modifierKeyMap if ->maxKeysPerModifier > 0 Sometimes (e.g. on my debian ppc box) maxKeysPerModifier of the SD is 0. So we try to malloc(0), bringing the whole server down with a FatalError because it looks as if the malloc failed. This is bad, so only alloc if we actually have something to alloc. --- Xi/exevents.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Xi/exevents.c b/Xi/exevents.c index 837afa383..1cef825cd 100644 --- a/Xi/exevents.c +++ b/Xi/exevents.c @@ -147,11 +147,14 @@ CopyKeyClass(DeviceIntPtr device, DeviceIntPtr master) if (master->devPrivates[CoreDevicePrivatesIndex].ptr != device) { memcpy(mk->modifierMap, dk->modifierMap, MAP_LENGTH); - mk->modifierKeyMap = xcalloc(8, dk->maxKeysPerModifier); - if (!mk->modifierKeyMap) - FatalError("[Xi] no memory for class shift.\n"); - memcpy(mk->modifierKeyMap, dk->modifierKeyMap, - (8 * dk->maxKeysPerModifier)); + if (dk->maxKeysPerModifier) + { + mk->modifierKeyMap = xcalloc(8, dk->maxKeysPerModifier); + if (!mk->modifierKeyMap) + FatalError("[Xi] no memory for class shift.\n"); + memcpy(mk->modifierKeyMap, dk->modifierKeyMap, + (8 * dk->maxKeysPerModifier)); + } mk->maxKeysPerModifier = dk->maxKeysPerModifier; mk->curKeySyms.minKeyCode = dk->curKeySyms.minKeyCode;