diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index e6b78a6997..fb84a485df 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -21,6 +21,7 @@ //#define DEBUG_IO //#define TASK_DEBUG //#define FORK_DEBUG +#define TERMIOS_DEBUG #define SIGNAL_DEBUG #define MAX_PROCESS_GIDS 32 @@ -1545,10 +1546,10 @@ int Process::sys$tcgetattr(int fd, Unix::termios* tp) return -EBADF; if (!descriptor->isTTY()) return -ENOTTY; - auto& tty = *descriptor->tty(); #ifdef TERMIOS_DEBUG - kprintf("sys$tcgetattr(fd=%d, tp=%p)\n", fd, tp); + dbgprintf("sys$tcgetattr(fd=%d, tp=%p)\n", fd, tp); #endif + auto& tty = *descriptor->tty(); memcpy(tp, &tty.termios(), sizeof(Unix::termios)); return 0; } @@ -1563,10 +1564,10 @@ int Process::sys$tcsetattr(int fd, int optional_actions, const Unix::termios* tp if (!descriptor->isTTY()) return -ENOTTY; #ifdef TERMIOS_DEBUG - kprintf("sys$tcsetattr(fd=%d, tp=%p)\n", fd, tp); + dbgprintf("sys$tcsetattr(fd=%d, tp=%p)\n", fd, tp); #endif auto& tty = *descriptor->tty(); - memcpy(&tty.termios(), tp, sizeof(Unix::termios)); + tty.set_termios(*tp); return 0; } diff --git a/Kernel/TTY.cpp b/Kernel/TTY.cpp index ce2eaf83c8..3fc553a8bd 100644 --- a/Kernel/TTY.cpp +++ b/Kernel/TTY.cpp @@ -57,3 +57,12 @@ void TTY::interrupt() }); } } + +void TTY::set_termios(const Unix::termios& t) +{ + m_termios = t; + dbgprintf("%s set_termios: IECHO? %u, ISIG? %u\n", + ttyName().characters(), + should_echo_input(), + should_generate_signals()); +} diff --git a/Kernel/TTY.h b/Kernel/TTY.h index ad9bc5c15e..e8bce25f73 100644 --- a/Kernel/TTY.h +++ b/Kernel/TTY.h @@ -16,7 +16,8 @@ public: void set_pgid(pid_t pgid) { m_pgid = pgid; } pid_t pgid() const { return m_pgid; } - Unix::termios& termios() { return m_termios; } + const Unix::termios& termios() const { return m_termios; } + void set_termios(const Unix::termios&); bool should_generate_signals() const { return m_termios.c_lflag & ISIG; } bool should_echo_input() const { return m_termios.c_lflag & ECHO; }