diff options
Diffstat (limited to 'usr.bin/tmux/hooks.c')
-rw-r--r-- | usr.bin/tmux/hooks.c | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/usr.bin/tmux/hooks.c b/usr.bin/tmux/hooks.c index 25391b999bb..8bc72cb1012 100644 --- a/usr.bin/tmux/hooks.c +++ b/usr.bin/tmux/hooks.c @@ -1,4 +1,4 @@ -/* $OpenBSD: hooks.c,v 1.1 2015/12/08 01:10:31 nicm Exp $ */ +/* $OpenBSD: hooks.c,v 1.2 2015/12/11 15:46:57 nicm Exp $ */ /* * Copyright (c) 2012 Thomas Adam <thomas@xteddy.org> @@ -32,7 +32,8 @@ static int hooks_cmp(struct hook *, struct hook *); RB_PROTOTYPE(hooks_tree, hook, entry, hooks_cmp); RB_GENERATE(hooks_tree, hook, entry, hooks_cmp); -struct hook *hooks_find1(struct hooks *, const char *); +static struct hook *hooks_find1(struct hooks *, const char *); +static void hooks_free1(struct hooks *, struct hook *); static int hooks_cmp(struct hook *hook1, struct hook *hook2) @@ -51,13 +52,22 @@ hooks_create(struct hooks *parent) return (hooks); } +static void +hooks_free1(struct hooks *hooks, struct hook *hook) +{ + RB_REMOVE(hooks_tree, &hooks->tree, hook); + cmd_list_free(hook->cmdlist); + free((char *)hook->name); + free(hook); +} + void hooks_free(struct hooks *hooks) { struct hook *hook, *hook1; RB_FOREACH_SAFE(hook, hooks_tree, &hooks->tree, hook1) - hooks_remove(hooks, hook); + hooks_free1(hooks, hook); free(hooks); } @@ -79,7 +89,7 @@ hooks_add(struct hooks *hooks, const char *name, struct cmd_list *cmdlist) struct hook *hook; if ((hook = hooks_find1(hooks, name)) != NULL) - hooks_remove(hooks, hook); + hooks_free1(hooks, hook); hook = xcalloc(1, sizeof *hook); hook->name = xstrdup(name); @@ -89,15 +99,15 @@ hooks_add(struct hooks *hooks, const char *name, struct cmd_list *cmdlist) } void -hooks_remove(struct hooks *hooks, struct hook *hook) +hooks_remove(struct hooks *hooks, const char *name) { - RB_REMOVE(hooks_tree, &hooks->tree, hook); - cmd_list_free(hook->cmdlist); - free((char *) hook->name); - free(hook); + struct hook *hook; + + if ((hook = hooks_find1(hooks, name)) != NULL) + hooks_free1(hooks, hook); } -struct hook * +static struct hook * hooks_find1(struct hooks *hooks, const char *name) { struct hook hook; |