Kernel: Implement FIONREAD for tty and pty

This commit is contained in:
Bananymous 2025-11-24 18:13:54 +02:00
parent 9d0990e5e8
commit 6a924db68c
2 changed files with 18 additions and 4 deletions

View File

@ -157,10 +157,19 @@ namespace Kernel
BAN::ErrorOr<long> PseudoTerminalMaster::ioctl_impl(int request, void* argument) BAN::ErrorOr<long> PseudoTerminalMaster::ioctl_impl(int request, void* argument)
{ {
auto slave = m_slave.lock(); switch (request)
if (!slave) {
return BAN::Error::from_errno(ENODEV); case FIONREAD:
return slave->ioctl(request, argument); *static_cast<int*>(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) PseudoTerminalSlave::PseudoTerminalSlave(BAN::String&& name, uint32_t number, mode_t mode, uid_t uid, gid_t gid)

View File

@ -202,6 +202,11 @@ namespace Kernel
TRY(set_font(BAN::move(new_font))); TRY(set_font(BAN::move(new_font)));
return 0; return 0;
} }
case FIONREAD:
{
*static_cast<int*>(argument) = m_output.flush ? m_output.bytes : 0;
return 0;
}
case TIOCGWINSZ: case TIOCGWINSZ:
{ {
auto* winsize = static_cast<struct winsize*>(argument); auto* winsize = static_cast<struct winsize*>(argument);