From 76175e09ba0fa9f1185a8ff2324c5d6eb992a781 Mon Sep 17 00:00:00 2001 From: Lucas Chollet Date: Mon, 2 Nov 2026 16:41:43 +0100 Subject: [PATCH] LibCore: Add wrappers for tc{get,set}winsize On Serenity, this uses the equivalent LibC function, otherwise it defaults to the pretty standard ioctl equivalent. At the time of writing, it seems that only musl, BSDs and Serenity have the standardized POSIX function. --- Userland/Libraries/LibCore/System.cpp | 25 +++++++++++++++++++++++++ Userland/Libraries/LibCore/System.h | 2 ++ 2 files changed, 27 insertions(+) diff --git a/Userland/Libraries/LibCore/System.cpp b/Userland/Libraries/LibCore/System.cpp index 281390f77bf..7e7cd43eb76 100644 --- a/Userland/Libraries/LibCore/System.cpp +++ b/Userland/Libraries/LibCore/System.cpp @@ -826,6 +826,31 @@ ErrorOr tcsetattr(int fd, int optional_actions, struct termios const& ios) return {}; } +ErrorOr tcgetwinsize(int fd) +{ + winsize ws {}; +#ifdef AK_OS_SERENITY + if (::tcgetwinsize(fd, &ws) < 0) + return Error::from_syscall("tcgetwinsize"sv, -errno); +#else + if (::ioctl(fd, TIOCGWINSZ, &ws) < 0) + return Error::from_syscall("ioctl"sv, -errno); +#endif + return ws; +} + +ErrorOr tcsetwinsize(int fd, winsize const& ws) +{ +#ifdef AK_OS_SERENITY + if (::tcsetwinsize(fd, &ws) < 0) + return Error::from_syscall("tcsetwinsize"sv, -errno); +#else + if (::ioctl(fd, TIOCSWINSZ, &ws) < 0) + return Error::from_syscall("ioctl"sv, -errno); +#endif + return {}; +} + ErrorOr tcsetpgrp(int fd, pid_t pgrp) { int rc = ::tcsetpgrp(fd, pgrp); diff --git a/Userland/Libraries/LibCore/System.h b/Userland/Libraries/LibCore/System.h index 8c4b9ce7109..b70e95c193f 100644 --- a/Userland/Libraries/LibCore/System.h +++ b/Userland/Libraries/LibCore/System.h @@ -149,6 +149,8 @@ ErrorOr getcwd(); ErrorOr ioctl(int fd, unsigned request, ...); ErrorOr tcgetattr(int fd); ErrorOr tcsetattr(int fd, int optional_actions, struct termios const&); +ErrorOr tcgetwinsize(int fd); +ErrorOr tcsetwinsize(int fd, winsize const&); ErrorOr tcsetpgrp(int fd, pid_t pgrp); ErrorOr chmod(StringView pathname, mode_t mode); ErrorOr lchown(StringView pathname, uid_t uid, gid_t gid);