mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2025-12-25 02:30:06 +01:00
Return Success from generate_modkeymap() when max_keys_per_mod is zero
max_keys_per_mod equal to zero is a valid situation so generate_modkeymap
should not return BadAlloc in this case.
Signed-off-by: Adam Tkac <atkac@redhat.com>
Reviewed-by: Patrick E. Kane <pekane52 at gmail.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit 05e616767e)
This commit is contained in:
parent
806790bd91
commit
2fa0029b54
1 changed files with 13 additions and 11 deletions
|
|
@ -286,7 +286,7 @@ int generate_modkeymap(ClientPtr client, DeviceIntPtr dev,
|
|||
{
|
||||
CARD8 keys_per_mod[8];
|
||||
int max_keys_per_mod;
|
||||
KeyCode *modkeymap;
|
||||
KeyCode *modkeymap = NULL;
|
||||
int i, j, ret;
|
||||
|
||||
ret = XaceHook(XACE_DEVICE_ACCESS, client, dev, DixGetAttrAccess);
|
||||
|
|
@ -310,18 +310,20 @@ int generate_modkeymap(ClientPtr client, DeviceIntPtr dev,
|
|||
}
|
||||
}
|
||||
|
||||
modkeymap = calloc(max_keys_per_mod * 8, sizeof(KeyCode));
|
||||
if (!modkeymap)
|
||||
return BadAlloc;
|
||||
if (max_keys_per_mod != 0) {
|
||||
modkeymap = calloc(max_keys_per_mod * 8, sizeof(KeyCode));
|
||||
if (!modkeymap)
|
||||
return BadAlloc;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
keys_per_mod[i] = 0;
|
||||
for (i = 0; i < 8; i++)
|
||||
keys_per_mod[i] = 0;
|
||||
|
||||
for (i = 8; i < MAP_LENGTH; i++) {
|
||||
for (j = 0; j < 8; j++) {
|
||||
if (dev->key->xkbInfo->desc->map->modmap[i] & (1 << j)) {
|
||||
modkeymap[(j * max_keys_per_mod) + keys_per_mod[j]] = i;
|
||||
keys_per_mod[j]++;
|
||||
for (i = 8; i < MAP_LENGTH; i++) {
|
||||
for (j = 0; j < 8; j++) {
|
||||
if (dev->key->xkbInfo->desc->map->modmap[i] & (1 << j)) {
|
||||
modkeymap[(j * max_keys_per_mod) + keys_per_mod[j]] = i;
|
||||
keys_per_mod[j]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue