diff --git a/system/termcurses/tcurses_vt100.c b/system/termcurses/tcurses_vt100.c index 33fcc3be3..2cd3c215a 100644 --- a/system/termcurses/tcurses_vt100.c +++ b/system/termcurses/tcurses_vt100.c @@ -1500,11 +1500,11 @@ FAR struct termcurses_s *tcurses_vt100_initialize(int in_fd, int out_fd) priv->lflag = cfg.c_lflag; - /* If ECHO enabled, disable it */ + /* If ECHO and ICANON enabled, disable it */ - if (cfg.c_lflag & ECHO) + if (cfg.c_lflag & (ECHO | ICANON)) { - cfg.c_lflag &= ~ECHO; + cfg.c_lflag &= ~(ECHO | ICANON); tcsetattr(priv->in_fd, TCSANOW, &cfg); } } @@ -1546,9 +1546,10 @@ static int tcurses_vt100_terminate(FAR struct termcurses_s *dev) if (isatty(priv->in_fd)) { - if (tcgetattr(priv->in_fd, &cfg) == 0 && priv->lflag & ECHO) + if ((priv->lflag & (ECHO | ICANON)) + && tcgetattr(priv->in_fd, &cfg) == 0) { - cfg.c_lflag |= ECHO; + cfg.c_lflag = priv->lflag; tcsetattr(priv->in_fd, TCSANOW, &cfg); } }