aboutsummaryrefslogtreecommitdiff
path: root/format.c
diff options
context:
space:
mode:
authornicm <nicm>2015-02-06 17:11:39 +0000
committernicm <nicm>2015-02-06 17:11:39 +0000
commit03758a50dc21b7c77b75f689d06f81292266c20a (patch)
treecae22c5417ac2176a5e082e71705a10d0f18a992 /format.c
parent83a8e1fd20e3cbd6da38d0b4d6973cad0484c27b (diff)
downloadrtmux-03758a50dc21b7c77b75f689d06f81292266c20a.tar.gz
rtmux-03758a50dc21b7c77b75f689d06f81292266c20a.tar.bz2
rtmux-03758a50dc21b7c77b75f689d06f81292266c20a.zip
Add format_expand_time and use it instead of status_replace where
command execution is not needed.
Diffstat (limited to 'format.c')
-rw-r--r--format.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/format.c b/format.c
index f7cd3596..01fa3ade 100644
--- a/format.c
+++ b/format.c
@@ -326,6 +326,33 @@ fail:
return (-1);
}
+/* Expand keys in a template, passing through strftime first. */
+char *
+format_expand_time(struct format_tree *ft, const char *fmt, time_t t)
+{
+ char *tmp, *expanded;
+ size_t tmplen;
+ struct tm *tm;
+
+ if (fmt == NULL)
+ return (xstrdup(""));
+
+ tm = localtime(&t);
+
+ tmp = NULL;
+ tmplen = strlen(fmt);
+
+ do {
+ tmp = xreallocarray(tmp, 2, tmplen);
+ tmplen *= 2;
+ } while (strftime(tmp, tmplen, fmt, tm) == 0);
+
+ expanded = format_expand(ft, tmp);
+ free(tmp);
+
+ return (expanded);
+}
+
/* Expand keys in a template. */
char *
format_expand(struct format_tree *ft, const char *fmt)
@@ -335,6 +362,9 @@ format_expand(struct format_tree *ft, const char *fmt)
size_t off, len, n;
int ch, brackets;
+ if (fmt == NULL)
+ return (xstrdup(""));
+
len = 64;
buf = xmalloc(len);
off = 0;