Index: src/hid_cfg_input.c =================================================================== --- src/hid_cfg_input.c (revision 1463) +++ src/hid_cfg_input.c (revision 1464) @@ -199,6 +199,8 @@ /* new node on this level */ ns = calloc(sizeof(hid_cfg_keyseq_t), 1); + if (!terminal) + htip_init(&ns->seq_next, keyhash_int, keyeq_int); htip_set(phash, addr.hash, ns); return ns; } @@ -326,7 +328,7 @@ { hid_cfg_keyseq_t *ns; hid_cfg_keyhash_t addr; - htip_t *phash = (*seq_len == 0) ? &km->keys : &(seq[*seq_len])->seq_next; + htip_t *phash = (*seq_len == 0) ? &km->keys : &((seq[(*seq_len)-1])->seq_next); addr.details.mods = mods; addr.details.key_char = key_char; @@ -333,8 +335,10 @@ /* already in the tree */ ns = htip_get(phash, addr.hash); - if (ns == NULL) + if (ns == NULL) { + (*seq_len) = 0; return -1; + } seq[*seq_len] = ns; (*seq_len)++; @@ -342,7 +346,7 @@ /* found a terminal node with an action */ if (ns->action_node != NULL) { int len = *seq_len; - *seq_len = 0; + (*seq_len) = 0; return len; }