Hi,
Attached is a patch which cleans up memory in display-message when using
a format. It also puts the message back through status_replace for the
strftime expansion (reduce duplication of code and such).
In addition, status_replace has its own format_tree which expands
session and client information.
--Ben
diff --git a/cmd-display-message.c b/cmd-display-message.c
index 1b87e77..f8b69d0 100644
--- a/cmd-display-message.c
+++ b/cmd-display-message.c
@@ -49,8 +49,7 @@ cmd_display_message_exec(struct cmd *self, struct cmd_ctx
*ctx)
const char *template;
char *msg;
struct format_tree *ft;
- char out[BUFSIZ];
- time_t t;
+ char *line;
if ((c = cmd_find_client(ctx, args_get(args, 'c'))) == NULL)
return (-1);
@@ -77,19 +76,18 @@ cmd_display_message_exec(struct cmd *self, struct cmd_ctx
*ctx)
template = "[#S] #I:#W, current pane #P - (%H:%M %d-%b-%y)";
ft = format_create();
- format_client(ft, c);
- format_session(ft, s);
format_winlink(ft, s, wl);
format_window_pane(ft, wp);
- t = time(NULL);
- strftime(out, sizeof out, template, localtime(&t));
+ line = format_expand(ft, template);
+ msg = status_replace(c, s, wl, wp, line, time(NULL), 0);
- msg = format_expand(ft, out);
if (args_has(self->args, 'p'))
ctx->print(ctx, "%s", msg);
else
status_message_set(c, "%s", msg);
+ xfree(line);
+ format_free(ft);
xfree(msg);
return (0);
diff --git a/status.c b/status.c
index 4df6745..6d48fe8 100644
--- a/status.c
+++ b/status.c
@@ -503,9 +503,10 @@ char *
status_replace(struct client *c, struct session *s, struct winlink *wl,
struct window_pane *wp, const char *fmt, time_t t, int jobsflag)
{
- static char out[BUFSIZ];
- char in[BUFSIZ], ch, *iptr, *optr;
- size_t len;
+ static char out[BUFSIZ];
+ char in[BUFSIZ], ch, *iptr, *optr, *line;
+ size_t len;
+ struct format_tree *ft;
len = strftime(in, sizeof in, fmt, localtime(&t));
in[len] = '\0';
@@ -527,7 +528,15 @@ status_replace(struct client *c, struct session *s, struct
winlink *wl,
}
*optr = '\0';
- return (xstrdup(out));
+ ft = format_create();
+ format_session(ft, s);
+ format_client(ft, c);
+
+ line = format_expand(ft, out);
+
+ format_free(ft);
+
+ return line;
}
/* Figure out job name and get its result, starting it off if necessary. */
------------------------------------------------------------------------------
Virtualization & Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/
_______________________________________________
tmux-users mailing list
tmux-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tmux-users