From 9c2d2ad694635ca53ae4e197ac3a3a1116557525 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Wed, 25 Sep 2019 20:33:01 +1000 Subject: [PATCH] Do not set O_NONBLOCK on stdin It is not necessary, and impacts also writing to stdout, leading to broken display on old ncurses versions. Fixes #3087 --- src/ncurses_ui.cc | 6 ------ src/ncurses_ui.hh | 1 - 2 files changed, 7 deletions(-) diff --git a/src/ncurses_ui.cc b/src/ncurses_ui.cc index 13859088..e628ad9d 100644 --- a/src/ncurses_ui.cc +++ b/src/ncurses_ui.cc @@ -361,7 +361,6 @@ NCursesUI::NCursesUI() }}, m_assistant(assistant_clippy) { - m_original_stdin_flags = fcntl(STDIN_FILENO, F_GETFL, 0); tcgetattr(STDIN_FILENO, &m_original_termios); initscr(); @@ -386,7 +385,6 @@ NCursesUI::~NCursesUI() m_palette.set_change_colors(false); endwin(); tcsetattr(STDIN_FILENO, TCSAFLUSH, &m_original_termios); - fcntl(STDIN_FILENO, F_SETFL, m_original_stdin_flags); set_signal_handler(SIGWINCH, SIG_DFL); set_signal_handler(SIGCONT, SIG_DFL); set_signal_handler(SIGTSTP, SIG_DFL); @@ -406,11 +404,9 @@ void NCursesUI::suspend() sigaddset(&unblock_sigtstp, SIGTSTP); sigprocmask(SIG_UNBLOCK, &unblock_sigtstp, &old_mask); tcsetattr(STDIN_FILENO, TCSAFLUSH, &m_original_termios); - fcntl(STDIN_FILENO, F_SETFL, m_original_stdin_flags); raise(SIGTSTP); // suspend here - m_original_stdin_flags = fcntl(STDIN_FILENO, F_GETFL, 0); tcsetattr(STDIN_FILENO, TCSAFLUSH, &m_original_termios); set_signal_handler(SIGTSTP, current); sigprocmask(SIG_SETMASK, &old_mask, nullptr); @@ -424,8 +420,6 @@ void NCursesUI::suspend() void NCursesUI::set_raw_mode() const { - fcntl(STDIN_FILENO, F_SETFL, m_original_stdin_flags | O_NONBLOCK); - termios attr = m_original_termios; attr.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON); attr.c_oflag &= ~OPOST; diff --git a/src/ncurses_ui.hh b/src/ncurses_ui.hh index 296d6ca3..3a7b406a 100644 --- a/src/ncurses_ui.hh +++ b/src/ncurses_ui.hh @@ -121,7 +121,6 @@ private: DisplayCoord m_dimensions; termios m_original_termios{}; - int m_original_stdin_flags; void set_raw_mode() const;