=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/cmd-confirm-before.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- src/usr.bin/tmux/cmd-confirm-before.c 2009/07/15 17:39:00 1.3 +++ src/usr.bin/tmux/cmd-confirm-before.c 2009/07/17 06:13:27 1.4 @@ -1,4 +1,4 @@ -/* $OpenBSD: cmd-confirm-before.c,v 1.3 2009/07/15 17:39:00 nicm Exp $ */ +/* $OpenBSD: cmd-confirm-before.c,v 1.4 2009/07/17 06:13:27 nicm Exp $ */ /* * Copyright (c) 2009 Tiago Cunha @@ -29,12 +29,8 @@ void cmd_confirm_before_init(struct cmd *, int); int cmd_confirm_before_callback(void *, const char *); +void cmd_confirm_before_free(void *); -struct cmd_confirm_before_data { - struct client *c; - char *cmd; -}; - const struct cmd_entry cmd_confirm_before_entry = { "confirm-before", "confirm", CMD_TARGET_CLIENT_USAGE " command", @@ -48,6 +44,11 @@ cmd_target_print }; +struct cmd_confirm_before_data { + struct client *c; + char *cmd; +}; + void cmd_confirm_before_init(struct cmd *self, int key) { @@ -91,8 +92,9 @@ cdata = xmalloc(sizeof *cdata); cdata->cmd = xstrdup(data->arg); cdata->c = c; - status_prompt_set( - cdata->c, buf, cmd_confirm_before_callback, cdata, PROMPT_SINGLE); + status_prompt_set(cdata->c, buf, + cmd_confirm_before_callback, cmd_confirm_before_free, cdata, + PROMPT_SINGLE); xfree(buf); return (1); @@ -108,7 +110,7 @@ char *cause; if (s == NULL || tolower((u_char) s[0]) != 'y' || s[1] != '\0') - goto out; + return (0); if (cmd_string_parse(cdata->cmd, &cmdlist, &cause) != 0) { if (cause != NULL) { @@ -116,7 +118,7 @@ status_message_set(c, "%s", cause); xfree(cause); } - goto out; + return (0); } ctx.msgdata = NULL; @@ -132,10 +134,15 @@ cmd_list_exec(cmdlist, &ctx); cmd_list_free(cmdlist); -out: + return (0); +} + +void +cmd_confirm_before_free(void *data) +{ + struct cmd_confirm_before_data *cdata = data; + if (cdata->cmd != NULL) xfree(cdata->cmd); xfree(cdata); - - return (0); }