Kernel/LibC: Add initial pseudo terminal support

This patch implements posix_openpt() and ptsname()

grantpt() and unlockpt() are left in LibC as stubs, as posix_openpt
currently does all of the needed work.
This commit is contained in:
2024-08-11 00:59:08 +03:00
parent ad645f31d0
commit a5a097fa4a
14 changed files with 335 additions and 43 deletions

View File

@@ -2,6 +2,7 @@
#include <BAN/ScopeGuard.h>
#include <BAN/UTF8.h>
#include <kernel/Debug.h>
#include <kernel/Device/DeviceNumbers.h>
#include <kernel/FS/DevFS/FileSystem.h>
#include <kernel/FS/VirtualFileSystem.h>
#include <kernel/Lock/LockGuard.h>
@@ -20,6 +21,25 @@ namespace Kernel
static BAN::RefPtr<TTY> s_tty;
static dev_t next_tty_rdev()
{
static BAN::Atomic<dev_t> s_minor = 0;
return makedev(DeviceNumber::TTY, s_minor++);
}
TTY::TTY(mode_t mode, uid_t uid, gid_t gid)
: CharacterDevice(mode, uid, gid)
, m_rdev(next_tty_rdev())
{
// FIXME: add correct baud and flags
m_termios.c_iflag = 0;
m_termios.c_oflag = 0;
m_termios.c_cflag = CS8;
m_termios.c_lflag = ECHO | ICANON;
m_termios.c_ospeed = B38400;
m_termios.c_ispeed = B38400;
}
BAN::RefPtr<TTY> TTY::current()
{
ASSERT(s_tty);