diff options
-rw-r--r-- | networking/telnet.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/networking/telnet.c b/networking/telnet.c index 6ad7712ab..24160057b 100644 --- a/networking/telnet.c +++ b/networking/telnet.c | |||
@@ -96,6 +96,7 @@ static struct Globalvars { | |||
96 | byte charmode; | 96 | byte charmode; |
97 | byte telflags; | 97 | byte telflags; |
98 | byte gotsig; | 98 | byte gotsig; |
99 | byte do_termios; | ||
99 | /* buffer to handle telnet negotiations */ | 100 | /* buffer to handle telnet negotiations */ |
100 | char iacbuf[IACBUFSIZE]; | 101 | char iacbuf[IACBUFSIZE]; |
101 | short iaclen; /* could even use byte */ | 102 | short iaclen; /* could even use byte */ |
@@ -616,12 +617,12 @@ static void fgotsig(int sig) | |||
616 | 617 | ||
617 | static void rawmode(void) | 618 | static void rawmode(void) |
618 | { | 619 | { |
619 | tcsetattr(0, TCSADRAIN, &G.termios_raw); | 620 | if (G.do_termios) tcsetattr(0, TCSADRAIN, &G.termios_raw); |
620 | } | 621 | } |
621 | 622 | ||
622 | static void cookmode(void) | 623 | static void cookmode(void) |
623 | { | 624 | { |
624 | tcsetattr(0, TCSADRAIN, &G.termios_def); | 625 | if (G.do_termios) tcsetattr(0, TCSADRAIN, &G.termios_def); |
625 | } | 626 | } |
626 | 627 | ||
627 | extern int telnet_main(int argc, char** argv) | 628 | extern int telnet_main(int argc, char** argv) |
@@ -649,11 +650,12 @@ extern int telnet_main(int argc, char** argv) | |||
649 | 650 | ||
650 | memset(&G, 0, sizeof G); | 651 | memset(&G, 0, sizeof G); |
651 | 652 | ||
652 | if (tcgetattr(0, &G.termios_def) < 0) | 653 | if (tcgetattr(0, &G.termios_def) >= 0) { |
653 | exit(1); | 654 | G.do_termios = 1; |
654 | 655 | ||
655 | G.termios_raw = G.termios_def; | 656 | G.termios_raw = G.termios_def; |
656 | cfmakeraw(&G.termios_raw); | 657 | cfmakeraw(&G.termios_raw); |
658 | } | ||
657 | 659 | ||
658 | if (argc < 2) | 660 | if (argc < 2) |
659 | bb_show_usage(); | 661 | bb_show_usage(); |