Free mem before assigning new objects to keymap.
git-svn-id: svn://svn.code.sf.net/p/rdesktop/code/trunk/rdesktop@950 423420c4-83ab-492f-b58f-81f9feb106b5
This commit is contained in:
parent
eb2937c307
commit
39408cef26
17
xkeymap.c
17
xkeymap.c
@ -54,6 +54,20 @@ static uint16 saved_remote_modifier_state = 0;
|
|||||||
|
|
||||||
static void update_modifier_state(uint8 scancode, BOOL pressed);
|
static void update_modifier_state(uint8 scancode, BOOL pressed);
|
||||||
|
|
||||||
|
/* Free key_translation structure, included linked list */
|
||||||
|
void
|
||||||
|
free_key_translation(key_translation * ptr)
|
||||||
|
{
|
||||||
|
key_translation *next;
|
||||||
|
|
||||||
|
while (ptr)
|
||||||
|
{
|
||||||
|
next = ptr->next;
|
||||||
|
xfree(ptr);
|
||||||
|
ptr = next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
add_to_keymap(char *keyname, uint8 scancode, uint16 modifiers, char *mapname)
|
add_to_keymap(char *keyname, uint8 scancode, uint16 modifiers, char *mapname)
|
||||||
{
|
{
|
||||||
@ -74,6 +88,7 @@ add_to_keymap(char *keyname, uint8 scancode, uint16 modifiers, char *mapname)
|
|||||||
memset(tr, 0, sizeof(key_translation));
|
memset(tr, 0, sizeof(key_translation));
|
||||||
tr->scancode = scancode;
|
tr->scancode = scancode;
|
||||||
tr->modifiers = modifiers;
|
tr->modifiers = modifiers;
|
||||||
|
free_key_translation(keymap[keysym & KEYMAP_MASK]);
|
||||||
keymap[keysym & KEYMAP_MASK] = tr;
|
keymap[keysym & KEYMAP_MASK] = tr;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -106,6 +121,7 @@ add_sequence(char *rest, char *mapname)
|
|||||||
|
|
||||||
DEBUG_KBD(("Adding sequence for keysym (0x%lx, %s) -> ", keysym, keyname));
|
DEBUG_KBD(("Adding sequence for keysym (0x%lx, %s) -> ", keysym, keyname));
|
||||||
|
|
||||||
|
free_key_translation(keymap[keysym & KEYMAP_MASK]);
|
||||||
prev_next = &keymap[keysym & KEYMAP_MASK];
|
prev_next = &keymap[keysym & KEYMAP_MASK];
|
||||||
|
|
||||||
while (*rest)
|
while (*rest)
|
||||||
@ -139,7 +155,6 @@ add_sequence(char *rest, char *mapname)
|
|||||||
DEBUG_KBD(("\n"));
|
DEBUG_KBD(("\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static BOOL
|
static BOOL
|
||||||
xkeymap_read(char *mapname)
|
xkeymap_read(char *mapname)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user