diff options
author | Tiago Cunha <tcunha@gmx.com> | 2012-04-24 16:24:03 +0000 |
---|---|---|
committer | Tiago Cunha <tcunha@gmx.com> | 2012-04-24 16:24:03 +0000 |
commit | bea5155fee4f1c6e798c86d84cad28d1e506ad0b (patch) | |
tree | 6c25cd7a2fc8407a7787748d912b2981836de6d7 /client.c | |
parent | 995c9a50ab7e68eba9d47fd8fd30313046330f21 (diff) | |
download | rtmux-bea5155fee4f1c6e798c86d84cad28d1e506ad0b.tar.gz rtmux-bea5155fee4f1c6e798c86d84cad28d1e506ad0b.tar.bz2 rtmux-bea5155fee4f1c6e798c86d84cad28d1e506ad0b.zip |
Sync OpenBSD patchset 1100:
Use an enum for client exit reasons, from George Nachman.
Diffstat (limited to 'client.c')
-rw-r--r-- | client.c | 57 |
1 files changed, 46 insertions, 11 deletions
@@ -35,7 +35,16 @@ struct imsgbuf client_ibuf; struct event client_event; -const char *client_exitmsg; +enum { + CLIENT_EXIT_NONE, + CLIENT_EXIT_DETACHED, + CLIENT_EXIT_DETACHED_HUP, + CLIENT_EXIT_LOST_TTY, + CLIENT_EXIT_TERMINATED, + CLIENT_EXIT_LOST_SERVER, + CLIENT_EXIT_EXITED, + CLIENT_EXIT_SERVER_EXITED, +} client_exitreason = CLIENT_EXIT_NONE; int client_exitval; enum msgtype client_exittype; int client_attached; @@ -121,6 +130,31 @@ failed: return (-1); } +/* Get exit string from reason number. */ +const char * +client_exit_message(void) +{ + switch (client_exitreason) { + case CLIENT_EXIT_NONE: + break; + case CLIENT_EXIT_DETACHED: + return ("detached"); + case CLIENT_EXIT_DETACHED_HUP: + return ("detached and SIGHUP"); + case CLIENT_EXIT_LOST_TTY: + return ("lost tty"); + case CLIENT_EXIT_TERMINATED: + return ("terminated"); + case CLIENT_EXIT_LOST_SERVER: + return ("lost server"); + case CLIENT_EXIT_EXITED: + return ("exited"); + case CLIENT_EXIT_SERVER_EXITED: + return ("server exited"); + } + return ("unknown reason"); +} + /* Client main loop. */ int client_main(int argc, char **argv, int flags) @@ -170,7 +204,8 @@ client_main(int argc, char **argv, int flags) * if the socket path matches $TMUX, this is probably the same server. */ if (shell_cmd == NULL && environ_path != NULL && - cmdflags & CMD_CANTNEST && strcmp(socket_path, environ_path) == 0) { + (cmdflags & CMD_CANTNEST) && + strcmp(socket_path, environ_path) == 0) { log_warnx("sessions should be nested with care. " "unset $TMUX to force."); return (1); @@ -225,8 +260,8 @@ client_main(int argc, char **argv, int flags) /* Print the exit message, if any, and exit. */ if (client_attached) { - if (client_exitmsg != NULL && !login_shell) - printf("[%s]\n", client_exitmsg); + if (client_exitreason != CLIENT_EXIT_NONE && !login_shell) + printf("[%s]\n", client_exit_message()); ppid = getppid(); if (client_exittype == MSG_DETACHKILL && ppid > 1) @@ -325,12 +360,12 @@ client_signal(int sig, unused short events, unused void *data) } else { switch (sig) { case SIGHUP: - client_exitmsg = "lost tty"; + client_exitreason = CLIENT_EXIT_LOST_TTY; client_exitval = 1; client_write_server(MSG_EXITING, NULL, 0); break; case SIGTERM: - client_exitmsg = "terminated"; + client_exitreason = CLIENT_EXIT_TERMINATED; client_exitval = 1; client_write_server(MSG_EXITING, NULL, 0); break; @@ -382,7 +417,7 @@ client_callback(unused int fd, short events, void *data) return; lost_server: - client_exitmsg = "lost server"; + client_exitreason = CLIENT_EXIT_LOST_SERVER; client_exitval = 1; event_loopexit(NULL); } @@ -479,9 +514,9 @@ client_dispatch_attached(void) client_exittype = imsg.hdr.type; if (imsg.hdr.type == MSG_DETACHKILL) - client_exitmsg = "detached and SIGHUP"; + client_exitreason = CLIENT_EXIT_DETACHED_HUP; else - client_exitmsg = "detached"; + client_exitreason = CLIENT_EXIT_DETACHED; client_write_server(MSG_EXITING, NULL, 0); break; case MSG_EXIT: @@ -490,7 +525,7 @@ client_dispatch_attached(void) fatalx("bad MSG_EXIT size"); client_write_server(MSG_EXITING, NULL, 0); - client_exitmsg = "exited"; + client_exitreason = CLIENT_EXIT_EXITED; break; case MSG_EXITED: if (datalen != 0) @@ -503,7 +538,7 @@ client_dispatch_attached(void) fatalx("bad MSG_SHUTDOWN size"); client_write_server(MSG_EXITING, NULL, 0); - client_exitmsg = "server exited"; + client_exitreason = CLIENT_EXIT_SERVER_EXITED; client_exitval = 1; break; case MSG_SUSPEND: |