diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2016-12-28 22:18:54 +0100 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2016-12-28 22:18:54 +0100 |
| commit | 305337f6b968c36ed948b2eee6738f5ee42fc824 (patch) | |
| tree | acf0daa267e5962627a4fb202ecddab4fd063aa9 | |
| parent | 48ddf8d9a54feb0675847d84d0e300cd25d8f786 (diff) | |
| download | vis-305337f6b968c36ed948b2eee6738f5ee42fc824.tar.gz vis-305337f6b968c36ed948b2eee6738f5ee42fc824.tar.xz | |
vis: do not free right hand side of mapping twice
Fix #447
| -rw-r--r-- | vis-cmds.c | 11 |
1 files changed, 3 insertions, 8 deletions
@@ -776,7 +776,6 @@ static bool cmd_langmap(Vis *vis, Win *win, Command *cmd, const char *argv[], Cu } static bool cmd_map(Vis *vis, Win *win, Command *cmd, const char *argv[], Cursor *cur, Filerange *range) { - KeyBinding *binding = NULL; bool mapped = false; bool local = strstr(argv[0], "-") != NULL; enum VisMode mode = str2vismode(argv[1]); @@ -790,22 +789,18 @@ static bool cmd_map(Vis *vis, Win *win, Command *cmd, const char *argv[], Cursor } const char *lhs = argv[2]; - char *rhs = strdup(argv[3]); - if (!rhs || !(binding = vis_binding_new(vis))) + KeyBinding *binding = vis_binding_new(vis); + if (!binding || !(binding->alias = strdup(argv[3]))) goto err; - binding->alias = rhs; - if (local) mapped = vis_window_mode_map(win, mode, cmd->flags == '!', lhs, binding); else mapped = vis_mode_map(vis, mode, cmd->flags == '!', lhs, binding); err: - if (!mapped) { - free(rhs); + if (!mapped) vis_binding_free(vis, binding); - } return mapped; } |
