=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/client.c,v retrieving revision 1.51 retrieving revision 1.52 diff -c -r1.51 -r1.52 *** src/usr.bin/tmux/client.c 2012/03/24 11:23:19 1.51 --- src/usr.bin/tmux/client.c 2012/04/23 23:18:43 1.52 *************** *** 1,4 **** ! /* $OpenBSD: client.c,v 1.51 2012/03/24 11:23:19 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: client.c,v 1.52 2012/04/23 23:18:43 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 35,41 **** struct imsgbuf client_ibuf; struct event client_event; ! const char *client_exitmsg; int client_exitval; enum msgtype client_exittype; int client_attached; --- 35,50 ---- struct imsgbuf client_ibuf; struct event client_event; ! 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,126 **** --- 130,160 ---- 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,176 **** * 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) { log_warnx("sessions should be nested with care. " "unset $TMUX to force."); return (1); --- 204,211 ---- * 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) { log_warnx("sessions should be nested with care. " "unset $TMUX to force."); return (1); *************** *** 223,230 **** /* Print the exit message, if any, and exit. */ if (client_attached) { ! if (client_exitmsg != NULL && !login_shell) ! printf("[%s]\n", client_exitmsg); ppid = getppid(); if (client_exittype == MSG_DETACHKILL && ppid > 1) --- 258,265 ---- /* Print the exit message, if any, and exit. */ if (client_attached) { ! if (client_exitreason != CLIENT_EXIT_NONE && !login_shell) ! printf("[%s]\n", client_exit_message()); ppid = getppid(); if (client_exittype == MSG_DETACHKILL && ppid > 1) *************** *** 323,334 **** } else { switch (sig) { case SIGHUP: ! client_exitmsg = "lost tty"; client_exitval = 1; client_write_server(MSG_EXITING, NULL, 0); break; case SIGTERM: ! client_exitmsg = "terminated"; client_exitval = 1; client_write_server(MSG_EXITING, NULL, 0); break; --- 358,369 ---- } else { switch (sig) { case SIGHUP: ! client_exitreason = CLIENT_EXIT_LOST_TTY; client_exitval = 1; client_write_server(MSG_EXITING, NULL, 0); break; case SIGTERM: ! client_exitreason = CLIENT_EXIT_TERMINATED; client_exitval = 1; client_write_server(MSG_EXITING, NULL, 0); break; *************** *** 380,386 **** return; lost_server: ! client_exitmsg = "lost server"; client_exitval = 1; event_loopexit(NULL); } --- 415,421 ---- return; lost_server: ! client_exitreason = CLIENT_EXIT_LOST_SERVER; client_exitval = 1; event_loopexit(NULL); } *************** *** 477,485 **** client_exittype = imsg.hdr.type; if (imsg.hdr.type == MSG_DETACHKILL) ! client_exitmsg = "detached and SIGHUP"; else ! client_exitmsg = "detached"; client_write_server(MSG_EXITING, NULL, 0); break; case MSG_EXIT: --- 512,520 ---- client_exittype = imsg.hdr.type; if (imsg.hdr.type == MSG_DETACHKILL) ! client_exitreason = CLIENT_EXIT_DETACHED_HUP; else ! client_exitreason = CLIENT_EXIT_DETACHED; client_write_server(MSG_EXITING, NULL, 0); break; case MSG_EXIT: *************** *** 488,494 **** fatalx("bad MSG_EXIT size"); client_write_server(MSG_EXITING, NULL, 0); ! client_exitmsg = "exited"; break; case MSG_EXITED: if (datalen != 0) --- 523,529 ---- fatalx("bad MSG_EXIT size"); client_write_server(MSG_EXITING, NULL, 0); ! client_exitreason = CLIENT_EXIT_EXITED; break; case MSG_EXITED: if (datalen != 0) *************** *** 501,507 **** fatalx("bad MSG_SHUTDOWN size"); client_write_server(MSG_EXITING, NULL, 0); ! client_exitmsg = "server exited"; client_exitval = 1; break; case MSG_SUSPEND: --- 536,542 ---- fatalx("bad MSG_SHUTDOWN size"); client_write_server(MSG_EXITING, NULL, 0); ! client_exitreason = CLIENT_EXIT_SERVER_EXITED; client_exitval = 1; break; case MSG_SUSPEND: