Attempt to ensure that everything passed to connection_fatal() is
[u/mdw/putty] / telnet.c
index 06717f1..8ce3cf4 100644 (file)
--- a/telnet.c
+++ b/telnet.c
@@ -575,7 +575,8 @@ static int telnet_closing(Plug plug, char *error_msg, int error_code,
     }
     if (error_msg) {
        /* A socket error has occurred. */
-       connection_fatal(error_msg);
+       logevent(error_msg);
+       connection_fatal("%s", error_msg);
     }                                 /* Otherwise, the remote side closed the connection normally. */
     return 0;
 }
@@ -601,7 +602,7 @@ static void telnet_sent(Plug plug, int bufsize)
  * Also places the canonical host name into `realhost'. It must be
  * freed by the caller.
  */
-static char *telnet_init(char *host, int port, char **realhost)
+static char *telnet_init(char *host, int port, char **realhost, int nodelay)
 {
     static struct plug_function_table fn_table = {
        telnet_closing,
@@ -636,7 +637,7 @@ static char *telnet_init(char *host, int port, char **realhost)
        sprintf(buf, "Connecting to %.100s port %d", addrbuf, port);
        logevent(buf);
     }
-    s = sk_new(addr, port, 0, 1, &fn_table_ptr);
+    s = new_connection(addr, *realhost, port, 0, 1, nodelay, &fn_table_ptr);
     if ((err = sk_socket_error(s)))
        return err;
 
@@ -848,6 +849,12 @@ static int telnet_ldisc(int option)
     return FALSE;
 }
 
+static int telnet_exitcode(void)
+{
+    /* Telnet doesn't transmit exit codes back to the client */
+    return 0;
+}
+
 Backend telnet_backend = {
     telnet_init,
     telnet_send,
@@ -855,6 +862,7 @@ Backend telnet_backend = {
     telnet_size,
     telnet_special,
     telnet_socket,
+    telnet_exitcode,
     telnet_sendok,
     telnet_ldisc,
     telnet_unthrottle,