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:
Peter Åstrand 2005-08-02 18:07:56 +00:00
parent eb2937c307
commit 39408cef26

View File

@ -54,6 +54,20 @@ static uint16 saved_remote_modifier_state = 0;
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
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));
tr->scancode = scancode;
tr->modifiers = modifiers;
free_key_translation(keymap[keysym & KEYMAP_MASK]);
keymap[keysym & KEYMAP_MASK] = tr;
return;
@ -106,6 +121,7 @@ add_sequence(char *rest, char *mapname)
DEBUG_KBD(("Adding sequence for keysym (0x%lx, %s) -> ", keysym, keyname));
free_key_translation(keymap[keysym & KEYMAP_MASK]);
prev_next = &keymap[keysym & KEYMAP_MASK];
while (*rest)
@ -139,7 +155,6 @@ add_sequence(char *rest, char *mapname)
DEBUG_KBD(("\n"));
}
static BOOL
xkeymap_read(char *mapname)
{