summaryrefslogtreecommitdiffstats
path: root/client.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2012-04-23 23:18:43 +0000
committerNicholas Marriott <nicm@openbsd.org>2012-04-23 23:18:43 +0000
commitd3e432069bd86b696fa65cccade5a82732a1f310 (patch)
tree757c1d43683557214834a5f206b0a5170f3d391e /client.c
parent0f9e0d1cfe645f276ef471131b55e9bfe2276758 (diff)
Use an enum for client exit reasons, from George Nachman.
Diffstat (limited to 'client.c')
-rw-r--r--client.c57
1 files 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: