]>
Commit | Line | Data |
---|---|---|
13a33bd9 JR |
1 | From 3fae47581a47613f1117b8794ae37b75ace73f3e Mon Sep 17 00:00:00 2001 |
2 | From: Adam Tkac <atkac@redhat.com> | |
3 | Date: Tue, 24 Aug 2010 17:21:30 +0200 | |
4 | Subject: [PATCH] Return Success from generate_modkeymap() when max_keys_per_mod is zero. | |
5 | ||
6 | max_keys_per_mod equal to zero is a valid situation so generate_modkeymap | |
7 | should not return BadAlloc in this case. | |
8 | ||
9 | Signed-off-by: Adam Tkac <atkac@redhat.com> | |
10 | --- | |
11 | dix/inpututils.c | 24 +++++++++++++----------- | |
12 | 1 files changed, 13 insertions(+), 11 deletions(-) | |
13 | ||
14 | diff --git a/dix/inpututils.c b/dix/inpututils.c | |
15 | index 8ec80b5..6693c67 100644 | |
16 | --- a/dix/inpututils.c | |
17 | +++ b/dix/inpututils.c | |
18 | @@ -286,7 +286,7 @@ int generate_modkeymap(ClientPtr client, DeviceIntPtr dev, | |
19 | { | |
20 | CARD8 keys_per_mod[8]; | |
21 | int max_keys_per_mod; | |
22 | - KeyCode *modkeymap; | |
23 | + KeyCode *modkeymap = NULL; | |
24 | int i, j, ret; | |
25 | ||
26 | ret = XaceHook(XACE_DEVICE_ACCESS, client, dev, DixGetAttrAccess); | |
27 | @@ -310,18 +310,20 @@ int generate_modkeymap(ClientPtr client, DeviceIntPtr dev, | |
28 | } | |
29 | } | |
30 | ||
31 | - modkeymap = calloc(max_keys_per_mod * 8, sizeof(KeyCode)); | |
32 | - if (!modkeymap) | |
33 | - return BadAlloc; | |
34 | + if (max_keys_per_mod != 0) { | |
35 | + modkeymap = calloc(max_keys_per_mod * 8, sizeof(KeyCode)); | |
36 | + if (!modkeymap) | |
37 | + return BadAlloc; | |
38 | ||
39 | - for (i = 0; i < 8; i++) | |
40 | - keys_per_mod[i] = 0; | |
41 | + for (i = 0; i < 8; i++) | |
42 | + keys_per_mod[i] = 0; | |
43 | ||
44 | - for (i = 8; i < MAP_LENGTH; i++) { | |
45 | - for (j = 0; j < 8; j++) { | |
46 | - if (dev->key->xkbInfo->desc->map->modmap[i] & (1 << j)) { | |
47 | - modkeymap[(j * max_keys_per_mod) + keys_per_mod[j]] = i; | |
48 | - keys_per_mod[j]++; | |
49 | + for (i = 8; i < MAP_LENGTH; i++) { | |
50 | + for (j = 0; j < 8; j++) { | |
51 | + if (dev->key->xkbInfo->desc->map->modmap[i] & (1 << j)) { | |
52 | + modkeymap[(j * max_keys_per_mod) + keys_per_mod[j]] = i; | |
53 | + keys_per_mod[j]++; | |
54 | + } | |
55 | } | |
56 | } | |
57 | } | |
58 | -- | |
59 | 1.7.2.2 | |
60 |