diff options
author | Nicholas Marriott <nicm@openbsd.org> | 2010-07-11 17:06:45 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@openbsd.org> | 2010-07-11 17:06:45 +0000 |
commit | b9c873cdaa3256f95a007d501fcab8375930bd94 (patch) | |
tree | 5884e8709758af698650ec415d7c1a343b4f71b8 /server-client.c | |
parent | b4b9b831ee9f6b1848657939fb19a7b7076d26f4 (diff) | |
download | rtmux-b9c873cdaa3256f95a007d501fcab8375930bd94.tar.gz rtmux-b9c873cdaa3256f95a007d501fcab8375930bd94.tar.bz2 rtmux-b9c873cdaa3256f95a007d501fcab8375930bd94.zip |
Return the command client return code with MSG_EXIT now that MSG_ERROR and
MSG_PRINT are unused.
New clients should be compatible with old tmux servers but vice versa may print
an error.
Diffstat (limited to 'server-client.c')
-rw-r--r-- | server-client.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/server-client.c b/server-client.c index c7929fc1..6dc0fd3a 100644 --- a/server-client.c +++ b/server-client.c @@ -664,6 +664,8 @@ server_client_msg_error(struct cmd_ctx *ctx, const char *fmt, ...) fputc('\n', ctx->cmdclient->stderr_file); fflush(ctx->cmdclient->stderr_file); + + ctx->cmdclient->retcode = 1; } /* Callback to send print message to client. */ @@ -701,10 +703,11 @@ server_client_msg_info(struct cmd_ctx *ctx, const char *fmt, ...) void server_client_msg_command(struct client *c, struct msg_command_data *data) { - struct cmd_ctx ctx; - struct cmd_list *cmdlist = NULL; - int argc; - char **argv, *cause; + struct cmd_ctx ctx; + struct cmd_list *cmdlist = NULL; + struct msg_exit_data exitdata; + int argc; + char **argv, *cause; ctx.error = server_client_msg_error; ctx.print = server_client_msg_print; @@ -735,15 +738,18 @@ server_client_msg_command(struct client *c, struct msg_command_data *data) } cmd_free_argv(argc, argv); - if (cmd_list_exec(cmdlist, &ctx) != 1) - server_write_client(c, MSG_EXIT, NULL, 0); + if (cmd_list_exec(cmdlist, &ctx) != 1) { + exitdata.retcode = c->retcode; + server_write_client(c, MSG_EXIT, &exitdata, sizeof exitdata); + } cmd_list_free(cmdlist); return; error: if (cmdlist != NULL) cmd_list_free(cmdlist); - server_write_client(c, MSG_EXIT, NULL, 0); + exitdata.retcode = c->retcode; + server_write_client(c, MSG_EXIT, &exitdata, sizeof exitdata); } /* Handle identify message. */ |