applying fix for:
authorpgf <pgf@69ca8d6d-28ef-0310-b511-8ec308f3f277>
Wed, 20 Jul 2005 19:55:19 +0000 (19:55 +0000)
committerpgf <pgf@69ca8d6d-28ef-0310-b511-8ec308f3f277>
Wed, 20 Jul 2005 19:55:19 +0000 (19:55 +0000)
    0000026: poor man's "scriptable" telnet

git-svn-id: svn://busybox.net/trunk/busybox@10886 69ca8d6d-28ef-0310-b511-8ec308f3f277

networking/telnet.c

index 6ad7712..2416005 100644 (file)
@@ -96,6 +96,7 @@ static struct Globalvars {
        byte    charmode;
        byte    telflags;
        byte    gotsig;
+       byte    do_termios;
        /* buffer to handle telnet negotiations */
        char    iacbuf[IACBUFSIZE];
        short   iaclen; /* could even use byte */
@@ -616,12 +617,12 @@ static void fgotsig(int sig)
 
 static void rawmode(void)
 {
-       tcsetattr(0, TCSADRAIN, &G.termios_raw);
+       if (G.do_termios) tcsetattr(0, TCSADRAIN, &G.termios_raw);
 }
 
 static void cookmode(void)
 {
-       tcsetattr(0, TCSADRAIN, &G.termios_def);
+       if (G.do_termios) tcsetattr(0, TCSADRAIN, &G.termios_def);
 }
 
 extern int telnet_main(int argc, char** argv)
@@ -649,11 +650,12 @@ extern int telnet_main(int argc, char** argv)
 
        memset(&G, 0, sizeof G);
 
-       if (tcgetattr(0, &G.termios_def) < 0)
-               exit(1);
+       if (tcgetattr(0, &G.termios_def) >= 0) {
+               G.do_termios = 1;
 
-       G.termios_raw = G.termios_def;
-       cfmakeraw(&G.termios_raw);
+               G.termios_raw = G.termios_def;
+               cfmakeraw(&G.termios_raw);
+       }
 
        if (argc < 2)
                bb_show_usage();