From eda4ab0e8e2f97225e4c0470318e9427e09bbfb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Thu, 29 Dec 2016 17:58:00 +0100 Subject: vis: cleanup key action lifetime management --- vis-lua.c | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) (limited to 'vis-lua.c') diff --git a/vis-lua.c b/vis-lua.c index 5c52cce..96fe7ea 100644 --- a/vis-lua.c +++ b/vis-lua.c @@ -665,23 +665,14 @@ static int keymap(lua_State *L, Vis *vis, Win *win) { const char *key = luaL_checkstring(L, 3); const void *func = func_ref_new(L, 4); const char *help = luaL_optstring(L, 5, NULL); - KeyBinding *binding = vis_binding_new(vis); - if (!binding) - goto err; - KeyAction *action = calloc(1, sizeof *action); + KeyBinding *binding = NULL; + KeyAction *action = vis_action_new(vis, NULL, help, keymapping, (Arg){ .v = func }); if (!action) goto err; + if (!(binding = vis_binding_new(vis))) + goto err; binding->action = action; - *action = (KeyAction){ - .name = NULL, - .help = help ? strdup(help) : help, - .func = keymapping, - .arg = (const Arg){ - .v = func, - }, - }; - if (win) { if (!vis_window_mode_map(win, mode, true, key, binding)) goto err; @@ -694,6 +685,7 @@ static int keymap(lua_State *L, Vis *vis, Win *win) { return 1; err: vis_binding_free(vis, binding); + vis_action_free(vis, action); lua_pushboolean(L, false); return 1; } -- cgit v1.2.3