From: Vladimir Zakharov Date: Fri, 15 Jun 2018 16:23:53 +0000 (+0300) Subject: Convert Keymaps to use STAILQ (initial commit) X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6e4925395ceb7e139ef5f58f2c16c8086708350e;p=neomutt Convert Keymaps to use STAILQ (initial commit) Fixes #1179 --- diff --git a/keymap.c b/keymap.c index a6b64515a..967a467e5 100644 --- a/keymap.c +++ b/keymap.c @@ -147,6 +147,7 @@ static struct Mapping KeyNames[] = { int LastKey; /**< contains the last key the user pressed */ struct Keymap *Keymaps[MENU_MAX]; +struct KeymapList *NewKeymaps[MENU_MAX]; /** * alloc_keys - Allocate space for a sequence of keys @@ -158,7 +159,7 @@ static struct Keymap *alloc_keys(size_t len, keycode_t *keys) { struct Keymap *p = mutt_mem_calloc(1, sizeof(struct Keymap)); p->len = len; - p->keys = mutt_mem_malloc(len * sizeof(keycode_t)); + p->keys = mutt_mem_calloc(len, sizeof(keycode_t)); memcpy(p->keys, keys, len * sizeof(keycode_t)); return p; } @@ -926,6 +927,7 @@ void init_extended_keys(void) void km_init(void) { memset(Keymaps, 0, sizeof(struct Keymap *) * MENU_MAX); + memset(NewKeymaps, 0, sizeof(struct KeymapList *) * MENU_MAX); create_bindings(OpAttach, MENU_ATTACH); create_bindings(OpBrowser, MENU_FOLDER); diff --git a/keymap.h b/keymap.h index 0ef9ed64d..1be509cf6 100644 --- a/keymap.h +++ b/keymap.h @@ -45,15 +45,18 @@ void init_extended_keys(void); */ struct Keymap { - char *macro; /**< macro expansion (op == OP_MACRO) */ - char *desc; /**< description of a macro for the help menu */ - struct Keymap *next; /**< next key in map */ - short op; /**< operation to perform */ - short eq; /**< number of leading keys equal to next entry */ - short len; /**< length of key sequence (unit: sizeof (keycode_t)) */ - keycode_t *keys; /**< key sequence */ + char *macro; /**< macro expansion (op == OP_MACRO) */ + char *desc; /**< description of a macro for the help menu */ + struct Keymap *next; /**< next key in map */ + short op; /**< operation to perform */ + short eq; /**< number of leading keys equal to next entry */ + short len; /**< length of key sequence (unit: sizeof (keycode_t)) */ + keycode_t *keys; /**< key sequence */ + STAILQ_ENTRY(Keymap) entries; /**< next key in map */ }; +STAILQ_HEAD(KeymapList, Keymap); + /** * struct KeyEvent - An event such as a keypress */