vis
a vi-like editor based on Plan 9's structural regular expressions
git clone https://9o.is/git/vis.git
commit 48690d7d9ea6d047a8527ba579cd684e956ca671 parent 46fbf8a456bc06c8f40dfc9f7a138cdc2285830b Author: Marc André Tanner <mat@brain-dump.org> Date: Fri, 17 Feb 2017 12:08:34 +0100 vis: cleanup error paths in key action handling code Diffstat:
| M | vis-modes.c | | | 16 | ++++++++++------ |
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/vis-modes.c b/vis-modes.c @@ -4,6 +4,14 @@ #include "text-motions.h" #include "util.h" +static void keyaction_free(KeyAction *action) { + if (!action) + return; + free((char*)action->name); + free((char*)action->help); + free(action); +} + KeyAction *vis_action_new(Vis *vis, const char *name, const char *help, KeyActionFunction *func, Arg arg) { KeyAction *action = calloc(1, sizeof *action); if (!action) @@ -18,9 +26,7 @@ KeyAction *vis_action_new(Vis *vis, const char *name, const char *help, KeyActio goto err; return action; err: - free((char*)action->name); - free((char*)action->help); - free(action); + keyaction_free(action); return NULL; } @@ -30,9 +36,7 @@ void vis_action_free(Vis *vis, KeyAction *action) { size_t len = array_length(&vis->actions_user); for (size_t i = 0; i < len; i++) { if (action == array_get_ptr(&vis->actions_user, i)) { - free((char*)action->name); - free((char*)action->help); - free(action); + keyaction_free(action); array_remove(&vis->actions_user, i); return; }