- markus@cvs.openbsd.org 2003/09/19 17:43:35
     [clientloop.c sshtty.c sshtty.h]
     remove fatal callbacks from client code; ok deraadt
diff --git a/clientloop.c b/clientloop.c
index d8def78..bc50f0b 100644
--- a/clientloop.c
+++ b/clientloop.c
@@ -59,7 +59,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: clientloop.c,v 1.112 2003/06/28 16:23:06 deraadt Exp $");
+RCSID("$OpenBSD: clientloop.c,v 1.113 2003/09/19 17:43:35 markus Exp $");
 
 #include "ssh.h"
 #include "ssh1.h"
@@ -139,7 +139,6 @@
 	if (in_non_blocking_mode) {
 		(void) fcntl(fileno(stdin), F_SETFL, 0);
 		in_non_blocking_mode = 0;
-		fatal_remove_cleanup((void (*) (void *)) leave_non_blocking, NULL);
 	}
 }
 
@@ -150,7 +149,6 @@
 {
 	in_non_blocking_mode = 1;
 	(void) fcntl(fileno(stdin), F_SETFL, O_NONBLOCK);
-	fatal_add_cleanup((void (*) (void *)) leave_non_blocking, NULL);
 }
 
 /*
@@ -844,8 +842,7 @@
 		    id, session_ident);
 	channel_cancel_cleanup(id);
 	session_closed = 1;
-	if (in_raw_mode())
-		leave_raw_mode();
+	leave_raw_mode();
 }
 
 /*
@@ -1034,11 +1031,8 @@
 	if (!isatty(fileno(stderr)))
 		unset_nonblock(fileno(stderr));
 
-	if (received_signal) {
-		if (in_non_blocking_mode)	/* XXX */
-			leave_non_blocking();
+	if (received_signal)
 		fatal("Killed by signal %d.", (int) received_signal);
-	}
 
 	/*
 	 * In interactive mode (with pseudo tty) display a message indicating
@@ -1387,3 +1381,17 @@
 	else
 		client_init_dispatch_15();
 }
+
+/* client specific fatal cleanup */
+void
+fatal(const char *fmt,...)
+{
+	va_list args;
+
+	va_start(args, fmt);
+	do_log(SYSLOG_LEVEL_FATAL, fmt, args);
+	va_end(args);
+	leave_raw_mode();
+	leave_non_blocking();
+	_exit(255);
+}