diff --git a/kernel/include/kernel/FS/Pipe.h b/kernel/include/kernel/FS/Pipe.h index 28d39d35..b5177baf 100644 --- a/kernel/include/kernel/FS/Pipe.h +++ b/kernel/include/kernel/FS/Pipe.h @@ -35,8 +35,6 @@ namespace Kernel virtual bool has_error_impl() const override { return m_reading_count == 0; } virtual bool has_hungup_impl() const override { return m_writing_count == 0; } - virtual BAN::ErrorOr ioctl_impl(int, void*) override; - private: Pipe(const struct stat&); diff --git a/kernel/kernel/FS/Inode.cpp b/kernel/kernel/FS/Inode.cpp index e6aef709..2de10120 100644 --- a/kernel/kernel/FS/Inode.cpp +++ b/kernel/kernel/FS/Inode.cpp @@ -5,6 +5,7 @@ #include #include +#include #include namespace Kernel @@ -317,7 +318,22 @@ namespace Kernel BAN::ErrorOr Inode::ioctl(int request, void* arg) { - return ioctl_impl(request, arg); + auto ret = ioctl_impl(request, arg); + if (!ret.is_error() || ret.error().get_error_code() != ENOTSUP) + return BAN::move(ret); + + switch (request) + { + case TIOCGWINSZ: + case TIOCSWINSZ: + case TCGETS: + case TCSETS: + case TCSETSW: + case TCSETSF: + return BAN::Error::from_errno(EINVAL); + default: + return BAN::Error::from_errno(ENOTSUP); + } } BAN::ErrorOr Inode::add_epoll(class Epoll* epoll) diff --git a/kernel/kernel/FS/Pipe.cpp b/kernel/kernel/FS/Pipe.cpp index be5779b0..1c63bd8e 100644 --- a/kernel/kernel/FS/Pipe.cpp +++ b/kernel/kernel/FS/Pipe.cpp @@ -268,19 +268,4 @@ namespace Kernel return BAN::Error::from_errno(ENODEV); } - BAN::ErrorOr Pipe::ioctl_impl(int cmd, void* arg) - { - switch (cmd) - { - case TIOCGWINSZ: - case TIOCSWINSZ: - case TCGETS: - case TCSETS: - case TCSETSW: - case TCSETSF: - return BAN::Error::from_errno(EINVAL); - } - return Inode::ioctl_impl(cmd, arg); - } - }