From b9c873cdaa3256f95a007d501fcab8375930bd94 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sun, 11 Jul 2010 17:06:45 +0000 Subject: 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. --- server-client.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'server-client.c') 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. */ -- cgit