diff options
Diffstat (limited to 'cmd-list.c')
-rw-r--r-- | cmd-list.c | 68 |
1 files changed, 8 insertions, 60 deletions
@@ -56,62 +56,6 @@ cmd_list_move(struct cmd_list *cmdlist, struct cmd_list *from) cmdlist->group = cmd_list_next_group++; } -struct cmd_list * -cmd_list_parse(int argc, char **argv, const char *file, u_int line, - char **cause) -{ - struct cmd_list *cmdlist; - struct cmd *cmd; - int i, lastsplit; - size_t arglen, new_argc; - char **copy_argv, **new_argv; - - copy_argv = cmd_copy_argv(argc, argv); - - cmdlist = cmd_list_new(); - - lastsplit = 0; - for (i = 0; i < argc; i++) { - arglen = strlen(copy_argv[i]); - if (arglen == 0 || copy_argv[i][arglen - 1] != ';') - continue; - copy_argv[i][arglen - 1] = '\0'; - - if (arglen > 1 && copy_argv[i][arglen - 2] == '\\') { - copy_argv[i][arglen - 2] = ';'; - continue; - } - - new_argc = i - lastsplit; - new_argv = copy_argv + lastsplit; - if (arglen != 1) - new_argc++; - - cmd = cmd_parse(new_argc, new_argv, file, line, cause); - if (cmd == NULL) - goto bad; - TAILQ_INSERT_TAIL(&cmdlist->list, cmd, qentry); - - lastsplit = i + 1; - } - - if (lastsplit != argc) { - cmd = cmd_parse(argc - lastsplit, copy_argv + lastsplit, - file, line, cause); - if (cmd == NULL) - goto bad; - TAILQ_INSERT_TAIL(&cmdlist->list, cmd, qentry); - } - - cmd_free_argv(argc, copy_argv); - return (cmdlist); - -bad: - cmd_list_free(cmdlist); - cmd_free_argv(argc, copy_argv); - return (NULL); -} - void cmd_list_free(struct cmd_list *cmdlist) { @@ -129,7 +73,7 @@ cmd_list_free(struct cmd_list *cmdlist) } char * -cmd_list_print(struct cmd_list *cmdlist) +cmd_list_print(struct cmd_list *cmdlist, int escaped) { struct cmd *cmd; char *buf, *this; @@ -141,12 +85,16 @@ cmd_list_print(struct cmd_list *cmdlist) TAILQ_FOREACH(cmd, &cmdlist->list, qentry) { this = cmd_print(cmd); - len += strlen(this) + 3; + len += strlen(this) + 4; buf = xrealloc(buf, len); strlcat(buf, this, len); - if (TAILQ_NEXT(cmd, qentry) != NULL) - strlcat(buf, " ; ", len); + if (TAILQ_NEXT(cmd, qentry) != NULL) { + if (escaped) + strlcat(buf, " \\; ", len); + else + strlcat(buf, " ; ", len); + } free(this); } |