diff --git a/kernel/kernel/Terminal/PseudoTerminal.cpp b/kernel/kernel/Terminal/PseudoTerminal.cpp index 5c8ea167..6955e538 100644 --- a/kernel/kernel/Terminal/PseudoTerminal.cpp +++ b/kernel/kernel/Terminal/PseudoTerminal.cpp @@ -157,10 +157,19 @@ namespace Kernel BAN::ErrorOr PseudoTerminalMaster::ioctl_impl(int request, void* argument) { - auto slave = m_slave.lock(); - if (!slave) - return BAN::Error::from_errno(ENODEV); - return slave->ioctl(request, argument); + switch (request) + { + case FIONREAD: + *static_cast(argument) = m_buffer_size; + return 0; + case TIOCGWINSZ: + case TIOCSWINSZ: + if (auto slave = m_slave.lock()) + return slave->ioctl(request, argument); + return BAN::Error::from_errno(ENODEV); + } + + return BAN::Error::from_errno(ENOTSUP); } PseudoTerminalSlave::PseudoTerminalSlave(BAN::String&& name, uint32_t number, mode_t mode, uid_t uid, gid_t gid) diff --git a/kernel/kernel/Terminal/TTY.cpp b/kernel/kernel/Terminal/TTY.cpp index 4e9a6a3a..45f1d079 100644 --- a/kernel/kernel/Terminal/TTY.cpp +++ b/kernel/kernel/Terminal/TTY.cpp @@ -202,6 +202,11 @@ namespace Kernel TRY(set_font(BAN::move(new_font))); return 0; } + case FIONREAD: + { + *static_cast(argument) = m_output.flush ? m_output.bytes : 0; + return 0; + } case TIOCGWINSZ: { auto* winsize = static_cast(argument);