From 39408cef26896ef66945f1893f96640f12f3555e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C3=85strand?= Date: Tue, 2 Aug 2005 18:07:56 +0000 Subject: [PATCH] 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 --- xkeymap.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/xkeymap.c b/xkeymap.c index 25c9036..2e2c708 100644 --- a/xkeymap.c +++ b/xkeymap.c @@ -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) {