mirror of
https://github.com/tmate-io/tmate.git
synced 2024-11-08 01:04:06 +01:00
Sync OpenBSD patchset 734:
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.
This commit is contained in:
parent
46f27eab22
commit
ad6a528f61
@ -1,4 +1,4 @@
|
||||
/* $Id: cmd-if-shell.c,v 1.8 2009-11-14 17:56:39 tcunha Exp $ */
|
||||
/* $Id: cmd-if-shell.c,v 1.9 2010-07-17 14:36:40 tcunha Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2009 Tiago Cunha <me@tiagocunha.org>
|
||||
@ -104,10 +104,13 @@ cmd_if_shell_free(void *data)
|
||||
{
|
||||
struct cmd_if_shell_data *cdata = data;
|
||||
struct cmd_ctx *ctx = &cdata->ctx;
|
||||
struct msg_exit_data exitdata;
|
||||
|
||||
if (ctx->cmdclient != NULL) {
|
||||
ctx->cmdclient->references--;
|
||||
server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0);
|
||||
exitdata.retcode = ctx->cmdclient->retcode;
|
||||
server_write_client(
|
||||
ctx->cmdclient, MSG_EXIT, &exitdata, sizeof exitdata);
|
||||
}
|
||||
if (ctx->curclient != NULL)
|
||||
ctx->curclient->references--;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: cmd-run-shell.c,v 1.7 2010-06-06 00:04:59 tcunha Exp $ */
|
||||
/* $Id: cmd-run-shell.c,v 1.8 2010-07-17 14:36:40 tcunha Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2009 Tiago Cunha <me@tiagocunha.org>
|
||||
@ -131,10 +131,13 @@ cmd_run_shell_free(void *data)
|
||||
{
|
||||
struct cmd_run_shell_data *cdata = data;
|
||||
struct cmd_ctx *ctx = &cdata->ctx;
|
||||
struct msg_exit_data exitdata;
|
||||
|
||||
if (ctx->cmdclient != NULL) {
|
||||
ctx->cmdclient->references--;
|
||||
server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0);
|
||||
exitdata.retcode = ctx->cmdclient->retcode;
|
||||
server_write_client(
|
||||
ctx->cmdclient, MSG_EXIT, &exitdata, sizeof exitdata);
|
||||
}
|
||||
if (ctx->curclient != NULL)
|
||||
ctx->curclient->references--;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: server-client.c,v 1.34 2010-07-02 02:52:13 tcunha Exp $ */
|
||||
/* $Id: server-client.c,v 1.35 2010-07-17 14:36:40 tcunha Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -663,6 +663,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. */
|
||||
@ -702,6 +704,7 @@ server_client_msg_command(struct client *c, struct msg_command_data *data)
|
||||
{
|
||||
struct cmd_ctx ctx;
|
||||
struct cmd_list *cmdlist = NULL;
|
||||
struct msg_exit_data exitdata;
|
||||
int argc;
|
||||
char **argv, *cause;
|
||||
|
||||
@ -734,15 +737,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. */
|
||||
|
12
tmux.c
12
tmux.c
@ -1,4 +1,4 @@
|
||||
/* $Id: tmux.c,v 1.213 2010-07-02 02:52:13 tcunha Exp $ */
|
||||
/* $Id: tmux.c,v 1.214 2010-07-17 14:36:41 tcunha Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -60,7 +60,6 @@ char *makesockpath(const char *);
|
||||
__dead void shell_exec(const char *, const char *);
|
||||
|
||||
struct imsgbuf *main_ibuf;
|
||||
int main_exitval;
|
||||
|
||||
void main_signal(int, short, unused void *);
|
||||
void main_callback(int, short, void *);
|
||||
@ -565,7 +564,6 @@ main(int argc, char **argv)
|
||||
events |= EV_WRITE;
|
||||
event_once(main_ibuf->fd, events, main_callback, shellcmd, NULL);
|
||||
|
||||
main_exitval = 0;
|
||||
event_dispatch();
|
||||
|
||||
clear_signals();
|
||||
@ -614,6 +612,7 @@ main_dispatch(const char *shellcmd)
|
||||
struct imsg imsg;
|
||||
ssize_t n, datalen;
|
||||
struct msg_shell_data shelldata;
|
||||
struct msg_exit_data exitdata;
|
||||
|
||||
if ((n = imsg_read(main_ibuf)) == -1 || n == 0)
|
||||
fatalx("imsg_read failed");
|
||||
@ -628,10 +627,13 @@ main_dispatch(const char *shellcmd)
|
||||
switch (imsg.hdr.type) {
|
||||
case MSG_EXIT:
|
||||
case MSG_SHUTDOWN:
|
||||
if (datalen != sizeof exitdata) {
|
||||
if (datalen != 0)
|
||||
fatalx("bad MSG_EXIT size");
|
||||
|
||||
exit(main_exitval);
|
||||
exit(0);
|
||||
}
|
||||
memcpy(&exitdata, imsg.data, sizeof exitdata);
|
||||
exit(exitdata.retcode);
|
||||
case MSG_READY:
|
||||
if (datalen != 0)
|
||||
fatalx("bad MSG_READY size");
|
||||
|
7
tmux.h
7
tmux.h
@ -1,4 +1,4 @@
|
||||
/* $Id: tmux.h,v 1.569 2010-07-02 02:56:07 tcunha Exp $ */
|
||||
/* $Id: tmux.h,v 1.570 2010-07-17 14:36:41 tcunha Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -412,6 +412,10 @@ struct msg_shell_data {
|
||||
char shell[MAXPATHLEN];
|
||||
};
|
||||
|
||||
struct msg_exit_data {
|
||||
int retcode;
|
||||
};
|
||||
|
||||
/* Mode key commands. */
|
||||
enum mode_key_cmd {
|
||||
MODEKEY_NONE,
|
||||
@ -1080,6 +1084,7 @@ struct message_entry {
|
||||
struct client {
|
||||
struct imsgbuf ibuf;
|
||||
struct event event;
|
||||
int retcode;
|
||||
|
||||
struct timeval creation_time;
|
||||
struct timeval activity_time;
|
||||
|
Loading…
Reference in New Issue
Block a user