From 58feebeed28bab04e7b462f7cd3beb81984f116e Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 4 Aug 2020 16:27:52 +0200 Subject: [PATCH] Kernel+LibC: Tidy up sys$ttyname() and sys$ptsname() - Remove goofy _r suffix from syscall names. - Don't take a signed buffer size. - Use Userspace. - Make TTY::tty_name() return a String instead of a StringView. --- Kernel/API/Syscall.h | 4 ++-- Kernel/Process.h | 4 ++-- Kernel/Syscalls/ttyname.cpp | 14 +++++--------- Kernel/TTY/SlavePTY.cpp | 2 +- Kernel/TTY/SlavePTY.h | 2 +- Kernel/TTY/TTY.h | 2 +- Kernel/TTY/VirtualConsole.h | 2 +- Libraries/LibC/stdlib.cpp | 2 +- Libraries/LibC/unistd.cpp | 2 +- 9 files changed, 15 insertions(+), 19 deletions(-) diff --git a/Kernel/API/Syscall.h b/Kernel/API/Syscall.h index 88d0459cb0..ecf8aee963 100644 --- a/Kernel/API/Syscall.h +++ b/Kernel/API/Syscall.h @@ -76,7 +76,7 @@ namespace Kernel { S(set_mmap_name) \ S(readlink) \ S(write) \ - S(ttyname_r) \ + S(ttyname) \ S(stat) \ S(getsid) \ S(setsid) \ @@ -111,7 +111,7 @@ namespace Kernel { S(times) \ S(utime) \ S(sync) \ - S(ptsname_r) \ + S(ptsname) \ S(select) \ S(unlink) \ S(poll) \ diff --git a/Kernel/Process.h b/Kernel/Process.h index c25384f3ff..5380a442ae 100644 --- a/Kernel/Process.h +++ b/Kernel/Process.h @@ -246,8 +246,8 @@ public: int sys$sethostname(const char*, ssize_t); int sys$uname(utsname*); int sys$readlink(const Syscall::SC_readlink_params*); - int sys$ttyname_r(int fd, char*, ssize_t); - int sys$ptsname_r(int fd, char*, ssize_t); + int sys$ttyname(int fd, Userspace, size_t); + int sys$ptsname(int fd, Userspace, size_t); pid_t sys$fork(RegisterState&); int sys$execve(const Syscall::SC_execve_params*); int sys$dup(int oldfd); diff --git a/Kernel/Syscalls/ttyname.cpp b/Kernel/Syscalls/ttyname.cpp index fb5f33e81e..544135cb5e 100644 --- a/Kernel/Syscalls/ttyname.cpp +++ b/Kernel/Syscalls/ttyname.cpp @@ -31,11 +31,9 @@ namespace Kernel { -int Process::sys$ttyname_r(int fd, char* buffer, ssize_t size) +int Process::sys$ttyname(int fd, Userspace buffer, size_t size) { REQUIRE_PROMISE(tty); - if (size < 0) - return -EINVAL; if (!validate_write(buffer, size)) return -EFAULT; auto description = file_description(fd); @@ -43,18 +41,16 @@ int Process::sys$ttyname_r(int fd, char* buffer, ssize_t size) return -EBADF; if (!description->is_tty()) return -ENOTTY; - String tty_name = description->tty()->tty_name(); - if ((size_t)size < tty_name.length() + 1) + auto tty_name = description->tty()->tty_name(); + if (size < tty_name.length() + 1) return -ERANGE; copy_to_user(buffer, tty_name.characters(), tty_name.length() + 1); return 0; } -int Process::sys$ptsname_r(int fd, char* buffer, ssize_t size) +int Process::sys$ptsname(int fd, Userspace buffer, size_t size) { REQUIRE_PROMISE(tty); - if (size < 0) - return -EINVAL; if (!validate_write(buffer, size)) return -EFAULT; auto description = file_description(fd); @@ -64,7 +60,7 @@ int Process::sys$ptsname_r(int fd, char* buffer, ssize_t size) if (!master_pty) return -ENOTTY; auto pts_name = master_pty->pts_name(); - if ((size_t)size < pts_name.length() + 1) + if (size < pts_name.length() + 1) return -ERANGE; copy_to_user(buffer, pts_name.characters(), pts_name.length() + 1); return 0; diff --git a/Kernel/TTY/SlavePTY.cpp b/Kernel/TTY/SlavePTY.cpp index 5a3a48dcae..5131c9ae77 100644 --- a/Kernel/TTY/SlavePTY.cpp +++ b/Kernel/TTY/SlavePTY.cpp @@ -54,7 +54,7 @@ SlavePTY::~SlavePTY() DevPtsFS::unregister_slave_pty(*this); } -StringView SlavePTY::tty_name() const +String SlavePTY::tty_name() const { return m_tty_name; } diff --git a/Kernel/TTY/SlavePTY.h b/Kernel/TTY/SlavePTY.h index 0e22a362ba..3d7e550e05 100644 --- a/Kernel/TTY/SlavePTY.h +++ b/Kernel/TTY/SlavePTY.h @@ -42,7 +42,7 @@ public: private: // ^TTY - virtual StringView tty_name() const override; + virtual String tty_name() const override; virtual ssize_t on_tty_write(const u8*, ssize_t) override; virtual void echo(u8) override; diff --git a/Kernel/TTY/TTY.h b/Kernel/TTY/TTY.h index 7e7470fa8e..46268000ce 100644 --- a/Kernel/TTY/TTY.h +++ b/Kernel/TTY/TTY.h @@ -46,7 +46,7 @@ public: virtual int ioctl(FileDescription&, unsigned request, FlatPtr arg) override final; virtual String absolute_path(const FileDescription&) const override { return tty_name(); } - virtual StringView tty_name() const = 0; + virtual String tty_name() const = 0; unsigned short rows() const { return m_rows; } unsigned short columns() const { return m_columns; } diff --git a/Kernel/TTY/VirtualConsole.h b/Kernel/TTY/VirtualConsole.h index 5d7c3dcf3a..b6a04587fb 100644 --- a/Kernel/TTY/VirtualConsole.h +++ b/Kernel/TTY/VirtualConsole.h @@ -55,7 +55,7 @@ private: // ^TTY virtual ssize_t on_tty_write(const u8*, ssize_t) override; - virtual StringView tty_name() const override { return m_tty_name; } + virtual String tty_name() const override { return m_tty_name; } virtual void echo(u8) override; // ^TerminalClient diff --git a/Libraries/LibC/stdlib.cpp b/Libraries/LibC/stdlib.cpp index 368d01235d..960ba25926 100644 --- a/Libraries/LibC/stdlib.cpp +++ b/Libraries/LibC/stdlib.cpp @@ -670,7 +670,7 @@ char* ptsname(int fd) int ptsname_r(int fd, char* buffer, size_t size) { - int rc = syscall(SC_ptsname_r, fd, buffer, size); + int rc = syscall(SC_ptsname, fd, buffer, size); __RETURN_WITH_ERRNO(rc, rc, -1); } diff --git a/Libraries/LibC/unistd.cpp b/Libraries/LibC/unistd.cpp index 5e69db0e43..c427396784 100644 --- a/Libraries/LibC/unistd.cpp +++ b/Libraries/LibC/unistd.cpp @@ -279,7 +279,7 @@ ssize_t write(int fd, const void* buf, size_t count) int ttyname_r(int fd, char* buffer, size_t size) { - int rc = syscall(SC_ttyname_r, fd, buffer, size); + int rc = syscall(SC_ttyname, fd, buffer, size); __RETURN_WITH_ERRNO(rc, rc, -1); }