Adam Tkac 1557084
From 3fae47581a47613f1117b8794ae37b75ace73f3e Mon Sep 17 00:00:00 2001
Adam Tkac 1557084
From: Adam Tkac <atkac@redhat.com>
Adam Tkac 1557084
Date: Tue, 24 Aug 2010 17:21:30 +0200
Adam Tkac 1557084
Subject: [PATCH] Return Success from generate_modkeymap() when max_keys_per_mod is zero.
Adam Tkac 1557084
Adam Tkac 1557084
max_keys_per_mod equal to zero is a valid situation so generate_modkeymap
Adam Tkac 1557084
should not return BadAlloc in this case.
Adam Tkac 1557084
Adam Tkac 1557084
Signed-off-by: Adam Tkac <atkac@redhat.com>
Adam Tkac 1557084
---
Adam Tkac 1557084
 dix/inpututils.c |   24 +++++++++++++-----------
Adam Tkac 1557084
 1 files changed, 13 insertions(+), 11 deletions(-)
Adam Tkac 1557084
Adam Tkac 1557084
diff --git a/dix/inpututils.c b/dix/inpututils.c
Adam Tkac 1557084
index 8ec80b5..6693c67 100644
Adam Tkac 1557084
--- a/dix/inpututils.c
Adam Tkac 1557084
+++ b/dix/inpututils.c
Adam Tkac 1557084
@@ -286,7 +286,7 @@ int generate_modkeymap(ClientPtr client, DeviceIntPtr dev,
Adam Tkac 1557084
 {
Adam Tkac 1557084
     CARD8 keys_per_mod[8];
Adam Tkac 1557084
     int max_keys_per_mod;
Adam Tkac 1557084
-    KeyCode *modkeymap;
Adam Tkac 1557084
+    KeyCode *modkeymap = NULL;
Adam Tkac 1557084
     int i, j, ret;
Adam Tkac 1557084
 
Adam Tkac 1557084
     ret = XaceHook(XACE_DEVICE_ACCESS, client, dev, DixGetAttrAccess);
Adam Tkac 1557084
@@ -310,18 +310,20 @@ int generate_modkeymap(ClientPtr client, DeviceIntPtr dev,
Adam Tkac 1557084
         }
Adam Tkac 1557084
     }
Adam Tkac 1557084
 
Adam Tkac 1557084
-    modkeymap = calloc(max_keys_per_mod * 8, sizeof(KeyCode));
Adam Tkac 1557084
-    if (!modkeymap)
Adam Tkac 1557084
-        return BadAlloc;
Adam Tkac 1557084
+    if (max_keys_per_mod != 0) {
Adam Tkac 1557084
+        modkeymap = calloc(max_keys_per_mod * 8, sizeof(KeyCode));
Adam Tkac 1557084
+        if (!modkeymap)
Adam Tkac 1557084
+            return BadAlloc;
Adam Tkac 1557084
 
Adam Tkac 1557084
-    for (i = 0; i < 8; i++)
Adam Tkac 1557084
-        keys_per_mod[i] = 0;
Adam Tkac 1557084
+        for (i = 0; i < 8; i++)
Adam Tkac 1557084
+            keys_per_mod[i] = 0;
Adam Tkac 1557084
 
Adam Tkac 1557084
-    for (i = 8; i < MAP_LENGTH; i++) {
Adam Tkac 1557084
-        for (j = 0; j < 8; j++) {
Adam Tkac 1557084
-            if (dev->key->xkbInfo->desc->map->modmap[i] & (1 << j)) {
Adam Tkac 1557084
-                modkeymap[(j * max_keys_per_mod) + keys_per_mod[j]] = i;
Adam Tkac 1557084
-                keys_per_mod[j]++;
Adam Tkac 1557084
+        for (i = 8; i < MAP_LENGTH; i++) {
Adam Tkac 1557084
+            for (j = 0; j < 8; j++) {
Adam Tkac 1557084
+                if (dev->key->xkbInfo->desc->map->modmap[i] & (1 << j)) {
Adam Tkac 1557084
+                    modkeymap[(j * max_keys_per_mod) + keys_per_mod[j]] = i;
Adam Tkac 1557084
+                    keys_per_mod[j]++;
Adam Tkac 1557084
+                }
Adam Tkac 1557084
             }
Adam Tkac 1557084
         }
Adam Tkac 1557084
     }
Adam Tkac 1557084
-- 
Adam Tkac 1557084
1.7.2.2
Adam Tkac 1557084