From: Ran Benita Date: Sat, 27 Jul 2013 18:19:22 +0000 (+0300) Subject: keymap: be more careful in xkb_keymap_unref X-Git-Tag: xkbcommon-0.3.2~46 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5f787e5e91492b40804049d0c45ea64b25de0c49;p=platform%2Fupstream%2Flibxkbcommon.git keymap: be more careful in xkb_keymap_unref To allow calling _unref on the keymap in whatever limbo state it happens to be in. Signed-off-by: Ran Benita --- diff --git a/src/keymap.c b/src/keymap.c index 4fbf33e..f8efd7b 100644 --- a/src/keymap.c +++ b/src/keymap.c @@ -91,21 +91,27 @@ xkb_keymap_unref(struct xkb_keymap *keymap) if (keymap->keys) { xkb_foreach_key(key, keymap) { - for (i = 0; i < key->num_groups; i++) { - for (j = 0; j < XkbKeyGroupWidth(key, i); j++) - if (key->groups[i].levels[j].num_syms > 1) - free(key->groups[i].levels[j].u.syms); - free(key->groups[i].levels); + if (key->groups) { + for (i = 0; i < key->num_groups; i++) { + if (key->groups[i].levels) { + for (j = 0; j < XkbKeyGroupWidth(key, i); j++) + if (key->groups[i].levels[j].num_syms > 1) + free(key->groups[i].levels[j].u.syms); + free(key->groups[i].levels); + } + } + free(key->groups); } - free(key->groups); } free(keymap->keys); } - for (i = 0; i < keymap->num_types; i++) { - free(keymap->types[i].entries); - free(keymap->types[i].level_names); + if (keymap->types) { + for (i = 0; i < keymap->num_types; i++) { + free(keymap->types[i].entries); + free(keymap->types[i].level_names); + } + free(keymap->types); } - free(keymap->types); free(keymap->sym_interprets); free(keymap->key_aliases); free(keymap->group_names);