Hi
I want to be reducing the use of status_replace so I don't want to add
it back to display-message.
It is a good idea to use format_* inside status_replace, but first it
needs to be changed to support the length modifiers. Then it can replace
most of status_replace1. I haven't done this yet because I haven't
really decided what to do with jobs.
Cheers
On Sat, Mar 03, 2012 at 11:35:57PM -0500, Ben Boeckel wrote:
> 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
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/tmux-users
------------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/tmux-users