aboutsummaryrefslogtreecommitdiff
path: root/cmd-list.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2015-12-03 14:43:33 +0000
committerNicholas Marriott <nicholas.marriott@gmail.com>2015-12-03 14:43:33 +0000
commit4d5cab408555341b64be10bf4fbd86a4d6415749 (patch)
treeea917586411cf24716aaec28a9d2d5a2b890c176 /cmd-list.c
parent3cdb2f0bb793b641ec07ef45b3fd485c2089d9e4 (diff)
parent66bad2e9798f191d34c083a9c2a9d644e8984b24 (diff)
downloadrtmux-4d5cab408555341b64be10bf4fbd86a4d6415749.tar.gz
rtmux-4d5cab408555341b64be10bf4fbd86a4d6415749.tar.bz2
rtmux-4d5cab408555341b64be10bf4fbd86a4d6415749.zip
Merge branch 'master' of github.com:tmux/tmux
Diffstat (limited to 'cmd-list.c')
-rw-r--r--cmd-list.c35
1 files changed, 19 insertions, 16 deletions
diff --git a/cmd-list.c b/cmd-list.c
index 0c75ed49..59fc7796 100644
--- a/cmd-list.c
+++ b/cmd-list.c
@@ -99,25 +99,28 @@ cmd_list_free(struct cmd_list *cmdlist)
free(cmdlist);
}
-size_t
-cmd_list_print(struct cmd_list *cmdlist, char *buf, size_t len)
+char *
+cmd_list_print(struct cmd_list *cmdlist)
{
struct cmd *cmd;
- size_t off, used;
+ char *buf, *this;
+ size_t len;
+
+ len = 1;
+ buf = xcalloc(1, len);
- off = 0;
TAILQ_FOREACH(cmd, &cmdlist->list, qentry) {
- if (off >= len)
- break;
- off += cmd_print(cmd, buf + off, len - off);
- if (off >= len)
- break;
- if (TAILQ_NEXT(cmd, qentry) != NULL) {
- used = xsnprintf(buf + off, len - off, " ; ");
- if (used > len - off)
- used = len - off;
- off += used;
- }
+ this = cmd_print(cmd);
+
+ len += strlen(this) + 3;
+ buf = xrealloc(buf, len);
+
+ strlcat(buf, this, len);
+ if (TAILQ_NEXT(cmd, qentry) != NULL)
+ strlcat(buf, " ; ", len);
+
+ free(this);
}
- return (off);
+
+ return (buf);
}