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(); |
