aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2017-02-17 12:08:34 +0100
committerMarc André Tanner <mat@brain-dump.org>2017-02-17 12:08:34 +0100
commitd73c20b96c7a6315f1c6b3fb68865d9e87819255 (patch)
tree159eefb2ef0bb478152f92a82ebb01821eb20a84
parent87cf9f433982e716ad4d18fedb43d9b0f30b325b (diff)
downloadvis-d73c20b96c7a6315f1c6b3fb68865d9e87819255.tar.gz
vis-d73c20b96c7a6315f1c6b3fb68865d9e87819255.tar.xz
vis: cleanup error paths in key action handling code
-rw-r--r--vis-modes.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/vis-modes.c b/vis-modes.c
index 05cdc01..47d02c1 100644
--- 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;
}