aboutsummaryrefslogtreecommitdiff
path: root/tmux.c
diff options
context:
space:
mode:
Diffstat (limited to 'tmux.c')
-rw-r--r--tmux.c42
1 files changed, 24 insertions, 18 deletions
diff --git a/tmux.c b/tmux.c
index 8f636c7b..6c798af3 100644
--- a/tmux.c
+++ b/tmux.c
@@ -1,4 +1,4 @@
-/* $Id: tmux.c,v 1.98 2009-01-18 12:09:42 nicm Exp $ */
+/* $Id: tmux.c,v 1.99 2009-01-19 18:23:40 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -179,7 +179,8 @@ main(int argc, char **argv)
struct client_ctx cctx;
struct msg_command_data cmddata;
struct buffer *b;
- struct cmd *cmd;
+ struct cmd_list *cmdlist;
+ struct cmd *cmd;
struct pollfd pfd;
struct hdr hdr;
const char *shell;
@@ -328,7 +329,7 @@ main(int argc, char **argv)
log_warnx("can't specify a command when unlocking");
exit(1);
}
- cmd = NULL;
+ cmdlist = NULL;
if ((pass = getpass("Password: ")) == NULL)
exit(1);
start_server = 0;
@@ -337,11 +338,24 @@ main(int argc, char **argv)
cmd = xmalloc(sizeof *cmd);
cmd->entry = &cmd_new_session_entry;
cmd->entry->init(cmd, 0);
- } else if ((cmd = cmd_parse(argc, argv, &cause)) == NULL) {
- log_warnx("%s", cause);
- exit(1);
+
+ cmdlist = xmalloc(sizeof *cmdlist);
+ TAILQ_INIT(cmdlist);
+ TAILQ_INSERT_HEAD(cmdlist, cmd, qentry);
+ } else {
+ cmdlist = cmd_list_parse(argc, argv, &cause);
+ if (cmdlist == NULL) {
+ log_warnx("%s", cause);
+ exit(1);
+ }
+ }
+ start_server = 0;
+ TAILQ_FOREACH(cmd, cmdlist, qentry) {
+ if (cmd->entry->flags & CMD_STARTSERVER) {
+ start_server = 1;
+ break;
+ }
}
- start_server = cmd->entry->flags & CMD_STARTSERVER;
}
memset(&cctx, 0, sizeof cctx);
@@ -354,8 +368,8 @@ main(int argc, char **argv)
client_write_server(
&cctx, MSG_UNLOCK, BUFFER_OUT(b), BUFFER_USED(b));
} else {
- cmd_send(cmd, b);
- cmd_free(cmd);
+ cmd_list_send(cmdlist, b);
+ cmd_list_free(cmdlist);
client_fill_session(&cmddata);
client_write_server2(&cctx, MSG_COMMAND,
&cmddata, sizeof cmddata, BUFFER_OUT(b), BUFFER_USED(b));
@@ -389,6 +403,7 @@ main(int argc, char **argv)
case MSG_EXIT:
n = 0;
goto out;
+ case MSG_ERROR:
case MSG_PRINT:
if (hdr.size > INT_MAX - 1)
fatalx("bad MSG_PRINT size");
@@ -397,15 +412,6 @@ main(int argc, char **argv)
if (hdr.size != 0)
buffer_remove(cctx.srv_in, hdr.size);
goto restart;
- case MSG_ERROR:
- if (hdr.size > INT_MAX - 1)
- fatalx("bad MSG_ERROR size");
- log_warnx("%.*s",
- (int) hdr.size, BUFFER_OUT(cctx.srv_in));
- if (hdr.size != 0)
- buffer_remove(cctx.srv_in, hdr.size);
- n = 1;
- goto out;
case MSG_READY:
n = client_main(&cctx);
goto out;