From d3e432069bd86b696fa65cccade5a82732a1f310 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 23 Apr 2012 23:18:43 +0000 Subject: [PATCH] Use an enum for client exit reasons, from George Nachman. --- client.c | 57 +++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 46 insertions(+), 11 deletions(-) diff --git a/client.c b/client.c index 030bc36d..84edf128 100644 --- a/client.c +++ b/client.c @@ -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); @@ -223,8 +258,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) @@ -323,12 +358,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; @@ -380,7 +415,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); } @@ -477,9 +512,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: @@ -488,7 +523,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) @@ -501,7 +536,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: