From 35eca115f505cd4642ea81183f461ca648f7bb5b Mon Sep 17 00:00:00 2001 From: Matheus Date: Tue, 28 May 2024 18:12:05 -0300 Subject: [PATCH] tty: add ttyname ioctl --- kernel-src/io/tty.c | 7 +++++++ patches/mlibc/jinx-working-patch.patch | 24 ++++++++++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/kernel-src/io/tty.c b/kernel-src/io/tty.c index 0b31556d..877cb598 100644 --- a/kernel-src/io/tty.c +++ b/kernel-src/io/tty.c @@ -295,6 +295,8 @@ static int poll(int minor, polldata_t *data, int events) { #define TIOCSCTTY 0x540E #define TIOCGPGRP 0x540F #define TIOCSPGRP 0x5410 +#define TTY_IOCTL_NAME 0x771101141113l +#define TTY_NAME_MAX 32 int tty_ioctl(tty_t *tty, unsigned long req, void *arg, int *result) { switch (req) { @@ -350,6 +352,11 @@ int tty_ioctl(tty_t *tty, unsigned long req, void *arg, int *result) { PROC_RELEASE(proc); return error; } + case TTY_IOCTL_NAME: { + size_t len = min(strlen(tty->name) + 1, TTY_NAME_MAX); + memcpy(arg, tty->name, len); + break; + } default: return ENOTTY; } diff --git a/patches/mlibc/jinx-working-patch.patch b/patches/mlibc/jinx-working-patch.patch index f8dbe108..3f1e49d4 100644 --- a/patches/mlibc/jinx-working-patch.patch +++ b/patches/mlibc/jinx-working-patch.patch @@ -192,10 +192,10 @@ index 0000000..e5b087a + diff --git mlibc-workdir/sysdeps/astral/generic/generic.cpp mlibc-workdir/sysdeps/astral/generic/generic.cpp new file mode 100644 -index 0000000..e94f84f +index 0000000..0755fba --- /dev/null +++ mlibc-workdir/sysdeps/astral/generic/generic.cpp -@@ -0,0 +1,694 @@ +@@ -0,0 +1,714 @@ +#include +#include +#include @@ -284,6 +284,26 @@ index 0000000..e94f84f + return ENOSYS; + } + ++ #ifndef MLIBC_BUILDING_RTLD ++ #define TTY_IOCTL_NAME 0x771101141113l ++ #define TTY_NAME_MAX 32 ++ #define TTY_PREFIX "/dev/" ++ ++ ++ int sys_ttyname(int fd, char * buffer, size_t size) { ++ size_t prefixlen = strlen(TTY_PREFIX); ++ if (size < TTY_NAME_MAX + prefixlen) { ++ mlibc::panicLogger() << "ttyname size too small" << frg::endlog; ++ __builtin_unreachable(); ++ } ++ ++ strcpy(buffer, TTY_PREFIX); ++ ++ int res; ++ return sys_ioctl(fd, TTY_IOCTL_NAME, (void *)(buffer + prefixlen), &res); ++ } ++ #endif ++ + int sys_fsync(int fd) { + long ret; + return syscall(SYSCALL_FSYNC, &ret, fd);