aboutsummaryrefslogtreecommitdiff
path: root/cmd.c
diff options
context:
space:
mode:
authorThomas Adam <thomas@xteddy.org>2020-04-13 18:01:43 +0100
committerThomas Adam <thomas@xteddy.org>2020-04-13 18:01:43 +0100
commitacc00cd13a767067f85ed27d52ad543c9a58869c (patch)
tree924a72d2029f32a3fb2b544bbc295b7e19bd197e /cmd.c
parent0a11f1607b9f3623dce287d4940bb925b533a340 (diff)
parent34804f2709a16dca45dc072fb53d03f79db61e51 (diff)
downloadrtmux-acc00cd13a767067f85ed27d52ad543c9a58869c.tar.gz
rtmux-acc00cd13a767067f85ed27d52ad543c9a58869c.tar.bz2
rtmux-acc00cd13a767067f85ed27d52ad543c9a58869c.zip
Merge branch 'obsd-master'
Diffstat (limited to 'cmd.c')
-rw-r--r--cmd.c46
1 files changed, 27 insertions, 19 deletions
diff --git a/cmd.c b/cmd.c
index afc99672..9cd5ab49 100644
--- a/cmd.c
+++ b/cmd.c
@@ -391,6 +391,13 @@ cmd_get_args(struct cmd *cmd)
return (cmd->args);
}
+/* Get group for command. */
+u_int
+cmd_get_group(struct cmd *cmd)
+{
+ return (cmd->group);
+}
+
/* Get file and line for command. */
void
cmd_get_source(struct cmd *cmd, const char **file, u_int *line)
@@ -616,7 +623,7 @@ cmd_list_free(struct cmd_list *cmdlist)
char *
cmd_list_print(struct cmd_list *cmdlist, int escaped)
{
- struct cmd *cmd;
+ struct cmd *cmd, *next;
char *buf, *this;
size_t len;
@@ -626,15 +633,24 @@ cmd_list_print(struct cmd_list *cmdlist, int escaped)
TAILQ_FOREACH(cmd, cmdlist->list, qentry) {
this = cmd_print(cmd);
- len += strlen(this) + 4;
+ len += strlen(this) + 6;
buf = xrealloc(buf, len);
strlcat(buf, this, len);
- if (TAILQ_NEXT(cmd, qentry) != NULL) {
- if (escaped)
- strlcat(buf, " \\; ", len);
- else
- strlcat(buf, " ; ", len);
+
+ next = TAILQ_NEXT(cmd, qentry);
+ if (next != NULL) {
+ if (cmd->group != next->group) {
+ if (escaped)
+ strlcat(buf, " \\;\\; ", len);
+ else
+ strlcat(buf, " ;; ", len);
+ } else {
+ if (escaped)
+ strlcat(buf, " \\; ", len);
+ else
+ strlcat(buf, " ; ", len);
+ }
}
free(this);
@@ -645,24 +661,16 @@ cmd_list_print(struct cmd_list *cmdlist, int escaped)
/* Get first command in list. */
struct cmd *
-cmd_list_first(struct cmd_list *cmdlist, u_int *group)
+cmd_list_first(struct cmd_list *cmdlist)
{
- struct cmd *cmd;
-
- cmd = TAILQ_FIRST(cmdlist->list);
- if (cmd != NULL && group != NULL)
- *group = cmd->group;
- return (cmd);
+ return (TAILQ_FIRST(cmdlist->list));
}
/* Get next command in list. */
struct cmd *
-cmd_list_next(struct cmd *cmd, u_int *group)
+cmd_list_next(struct cmd *cmd)
{
- cmd = TAILQ_NEXT(cmd, qentry);
- if (cmd != NULL && group != NULL)
- *group = cmd->group;
- return (cmd);
+ return (TAILQ_NEXT(cmd, qentry));
}
/* Do all of the commands in this command list have this flag? */