From 08cd75ac4baa2814bb6154c3ad127957b3b03b7c Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 7 Jun 2019 09:36:51 +0200 Subject: Kernel: Rename FileDescriptor to FileDescription. After reading a bunch of POSIX specs, I've learned that a file descriptor is the number that refers to a file description, not the description itself. So this patch renames FileDescriptor to FileDescription, and Process now has FileDescription* file_description(int fd). --- Kernel/Console.cpp | 6 +- Kernel/Console.h | 8 +- Kernel/Devices/BXVGADevice.cpp | 12 +- Kernel/Devices/BXVGADevice.h | 12 +- Kernel/Devices/DebugLogDevice.cpp | 2 +- Kernel/Devices/DebugLogDevice.h | 8 +- Kernel/Devices/Device.cpp | 2 +- Kernel/Devices/Device.h | 2 +- Kernel/Devices/FullDevice.cpp | 6 +- Kernel/Devices/FullDevice.h | 8 +- Kernel/Devices/KeyboardDevice.cpp | 6 +- Kernel/Devices/KeyboardDevice.h | 8 +- Kernel/Devices/NullDevice.cpp | 6 +- Kernel/Devices/NullDevice.h | 8 +- Kernel/Devices/PS2MouseDevice.cpp | 6 +- Kernel/Devices/PS2MouseDevice.h | 8 +- Kernel/Devices/RandomDevice.cpp | 6 +- Kernel/Devices/RandomDevice.h | 8 +- Kernel/Devices/ZeroDevice.cpp | 6 +- Kernel/Devices/ZeroDevice.h | 8 +- Kernel/File.cpp | 10 +- Kernel/File.h | 20 +- Kernel/FileSystem/Ext2FileSystem.cpp | 4 +- Kernel/FileSystem/Ext2FileSystem.h | 4 +- Kernel/FileSystem/FIFO.cpp | 16 +- Kernel/FileSystem/FIFO.h | 14 +- Kernel/FileSystem/FileDescription.cpp | 333 ++++++++++++++++++++++++++++++ Kernel/FileSystem/FileDescription.h | 125 +++++++++++ Kernel/FileSystem/FileDescriptor.cpp | 333 ------------------------------ Kernel/FileSystem/FileDescriptor.h | 125 ----------- Kernel/FileSystem/FileSystem.h | 2 +- Kernel/FileSystem/Inode.cpp | 2 +- Kernel/FileSystem/Inode.h | 8 +- Kernel/FileSystem/InodeFile.cpp | 10 +- Kernel/FileSystem/InodeFile.h | 12 +- Kernel/FileSystem/ProcFS.cpp | 14 +- Kernel/FileSystem/ProcFS.h | 4 +- Kernel/FileSystem/SyntheticFileSystem.cpp | 6 +- Kernel/FileSystem/SyntheticFileSystem.h | 4 +- Kernel/FileSystem/VirtualFileSystem.cpp | 10 +- Kernel/FileSystem/VirtualFileSystem.h | 10 +- Kernel/KSyms.cpp | 2 +- Kernel/Makefile | 2 +- Kernel/Net/IPv4Socket.cpp | 20 +- Kernel/Net/IPv4Socket.h | 20 +- Kernel/Net/LocalSocket.cpp | 22 +- Kernel/Net/LocalSocket.h | 24 +-- Kernel/Net/Socket.cpp | 4 +- Kernel/Net/Socket.h | 14 +- Kernel/Net/TCPSocket.cpp | 2 +- Kernel/Net/TCPSocket.h | 2 +- Kernel/Net/UDPSocket.h | 2 +- Kernel/Process.cpp | 84 ++++---- Kernel/Process.h | 18 +- Kernel/ProcessTracer.cpp | 4 +- Kernel/ProcessTracer.h | 10 +- Kernel/Scheduler.cpp | 2 +- Kernel/SharedMemory.cpp | 8 +- Kernel/SharedMemory.h | 12 +- Kernel/TTY/MasterPTY.cpp | 14 +- Kernel/TTY/MasterPTY.h | 10 +- Kernel/TTY/PTYMultiplexer.cpp | 6 +- Kernel/TTY/PTYMultiplexer.h | 10 +- Kernel/TTY/SlavePTY.cpp | 6 +- Kernel/TTY/SlavePTY.h | 6 +- Kernel/TTY/TTY.cpp | 10 +- Kernel/TTY/TTY.h | 12 +- Kernel/Thread.cpp | 6 +- Kernel/Thread.h | 8 +- 69 files changed, 771 insertions(+), 771 deletions(-) create mode 100644 Kernel/FileSystem/FileDescription.cpp create mode 100644 Kernel/FileSystem/FileDescription.h delete mode 100644 Kernel/FileSystem/FileDescriptor.cpp delete mode 100644 Kernel/FileSystem/FileDescriptor.h (limited to 'Kernel') diff --git a/Kernel/Console.cpp b/Kernel/Console.cpp index 394270a785..5ee1048557 100644 --- a/Kernel/Console.cpp +++ b/Kernel/Console.cpp @@ -23,19 +23,19 @@ Console::~Console() { } -bool Console::can_read(FileDescriptor&) const +bool Console::can_read(FileDescription&) const { return false; } -ssize_t Console::read(FileDescriptor&, byte*, ssize_t) +ssize_t Console::read(FileDescription&, byte*, ssize_t) { // FIXME: Implement reading from the console. // Maybe we could use a ring buffer for this device? return 0; } -ssize_t Console::write(FileDescriptor&, const byte* data, ssize_t size) +ssize_t Console::write(FileDescription&, const byte* data, ssize_t size) { if (!size) return 0; diff --git a/Kernel/Console.h b/Kernel/Console.h index 59fe006c4e..e1f4e2d2a3 100644 --- a/Kernel/Console.h +++ b/Kernel/Console.h @@ -19,10 +19,10 @@ public: virtual ~Console() override; // ^CharacterDevice - virtual bool can_read(FileDescriptor&) const override; - virtual bool can_write(FileDescriptor&) const override { return true; } - virtual ssize_t read(FileDescriptor&, byte*, ssize_t) override; - virtual ssize_t write(FileDescriptor&, const byte*, ssize_t) override; + virtual bool can_read(FileDescription&) const override; + virtual bool can_write(FileDescription&) const override { return true; } + virtual ssize_t read(FileDescription&, byte*, ssize_t) override; + virtual ssize_t write(FileDescription&, const byte*, ssize_t) override; virtual const char* class_name() const override { return "Console"; } void set_implementation(ConsoleImplementation* implementation) { m_implementation = implementation; } diff --git a/Kernel/Devices/BXVGADevice.cpp b/Kernel/Devices/BXVGADevice.cpp index e4b2d4c356..e8ad647c32 100644 --- a/Kernel/Devices/BXVGADevice.cpp +++ b/Kernel/Devices/BXVGADevice.cpp @@ -84,7 +84,7 @@ dword BXVGADevice::find_framebuffer_address() return framebuffer_address; } -KResultOr BXVGADevice::mmap(Process& process, FileDescriptor&, LinearAddress preferred_laddr, size_t offset, size_t size, int prot) +KResultOr BXVGADevice::mmap(Process& process, FileDescription&, LinearAddress preferred_laddr, size_t offset, size_t size, int prot) { ASSERT(offset == 0); ASSERT(size == framebuffer_size_in_bytes()); @@ -104,7 +104,7 @@ KResultOr BXVGADevice::mmap(Process& process, FileDescriptor&, LinearAd return region; } -int BXVGADevice::ioctl(FileDescriptor&, unsigned request, unsigned arg) +int BXVGADevice::ioctl(FileDescription&, unsigned request, unsigned arg) { switch (request) { case BXVGA_DEV_IOCTL_SET_Y_OFFSET: @@ -124,22 +124,22 @@ int BXVGADevice::ioctl(FileDescriptor&, unsigned request, unsigned arg) }; } -bool BXVGADevice::can_read(FileDescriptor&) const +bool BXVGADevice::can_read(FileDescription&) const { ASSERT_NOT_REACHED(); } -bool BXVGADevice::can_write(FileDescriptor&) const +bool BXVGADevice::can_write(FileDescription&) const { ASSERT_NOT_REACHED(); } -ssize_t BXVGADevice::read(FileDescriptor&, byte*, ssize_t) +ssize_t BXVGADevice::read(FileDescription&, byte*, ssize_t) { ASSERT_NOT_REACHED(); } -ssize_t BXVGADevice::write(FileDescriptor&, const byte*, ssize_t) +ssize_t BXVGADevice::write(FileDescription&, const byte*, ssize_t) { ASSERT_NOT_REACHED(); } diff --git a/Kernel/Devices/BXVGADevice.h b/Kernel/Devices/BXVGADevice.h index 2270a41a9f..ac8b6f4fa8 100644 --- a/Kernel/Devices/BXVGADevice.h +++ b/Kernel/Devices/BXVGADevice.h @@ -17,18 +17,18 @@ public: void set_resolution(int width, int height); void set_y_offset(int); - virtual int ioctl(FileDescriptor&, unsigned request, unsigned arg) override; - virtual KResultOr mmap(Process&, FileDescriptor&, LinearAddress preferred_laddr, size_t offset, size_t, int prot) override; + virtual int ioctl(FileDescription&, unsigned request, unsigned arg) override; + virtual KResultOr mmap(Process&, FileDescription&, LinearAddress preferred_laddr, size_t offset, size_t, int prot) override; size_t framebuffer_size_in_bytes() const { return m_framebuffer_size.area() * sizeof(dword) * 2; } Size framebuffer_size() const { return m_framebuffer_size; } private: virtual const char* class_name() const override { return "BXVGA"; } - virtual bool can_read(FileDescriptor&) const override; - virtual bool can_write(FileDescriptor&) const override; - virtual ssize_t read(FileDescriptor&, byte*, ssize_t) override; - virtual ssize_t write(FileDescriptor&, const byte*, ssize_t) override; + virtual bool can_read(FileDescription&) const override; + virtual bool can_write(FileDescription&) const override; + virtual ssize_t read(FileDescription&, byte*, ssize_t) override; + virtual ssize_t write(FileDescription&, const byte*, ssize_t) override; void set_register(word index, word value); dword find_framebuffer_address(); diff --git a/Kernel/Devices/DebugLogDevice.cpp b/Kernel/Devices/DebugLogDevice.cpp index daa879ffb1..838101dda4 100644 --- a/Kernel/Devices/DebugLogDevice.cpp +++ b/Kernel/Devices/DebugLogDevice.cpp @@ -19,7 +19,7 @@ DebugLogDevice::~DebugLogDevice() { } -ssize_t DebugLogDevice::write(FileDescriptor&, const byte* data, ssize_t data_size) +ssize_t DebugLogDevice::write(FileDescription&, const byte* data, ssize_t data_size) { for (int i = 0; i < data_size; ++i) IO::out8(0xe9, data[i]); diff --git a/Kernel/Devices/DebugLogDevice.h b/Kernel/Devices/DebugLogDevice.h index 9b09205074..2ef4ade046 100644 --- a/Kernel/Devices/DebugLogDevice.h +++ b/Kernel/Devices/DebugLogDevice.h @@ -9,9 +9,9 @@ public: private: // ^CharacterDevice - virtual ssize_t read(FileDescriptor&, byte*, ssize_t) override { return 0; } - virtual ssize_t write(FileDescriptor&, const byte*, ssize_t) override; - virtual bool can_write(FileDescriptor&) const override { return true; } - virtual bool can_read(FileDescriptor&) const override { return true; } + virtual ssize_t read(FileDescription&, byte*, ssize_t) override { return 0; } + virtual ssize_t write(FileDescription&, const byte*, ssize_t) override; + virtual bool can_write(FileDescription&) const override { return true; } + virtual bool can_read(FileDescription&) const override { return true; } virtual const char* class_name() const override { return "DebugLogDevice"; } }; diff --git a/Kernel/Devices/Device.cpp b/Kernel/Devices/Device.cpp index fe3c28f01f..24a5274456 100644 --- a/Kernel/Devices/Device.cpp +++ b/Kernel/Devices/Device.cpp @@ -14,7 +14,7 @@ Device::~Device() VFS::the().unregister_device({}, *this); } -String Device::absolute_path(const FileDescriptor&) const +String Device::absolute_path(const FileDescription&) const { return String::format("device:%u,%u (%s)", m_major, m_minor, class_name()); } diff --git a/Kernel/Devices/Device.h b/Kernel/Devices/Device.h index 7c19a9fea9..3b2256cf64 100644 --- a/Kernel/Devices/Device.h +++ b/Kernel/Devices/Device.h @@ -19,7 +19,7 @@ public: unsigned major() const { return m_major; } unsigned minor() const { return m_minor; } - virtual String absolute_path(const FileDescriptor&) const override; + virtual String absolute_path(const FileDescription&) const override; uid_t uid() const { return m_uid; } uid_t gid() const { return m_gid; } diff --git a/Kernel/Devices/FullDevice.cpp b/Kernel/Devices/FullDevice.cpp index 024cd699e2..fd4403d1ce 100644 --- a/Kernel/Devices/FullDevice.cpp +++ b/Kernel/Devices/FullDevice.cpp @@ -12,19 +12,19 @@ FullDevice::~FullDevice() { } -bool FullDevice::can_read(FileDescriptor&) const +bool FullDevice::can_read(FileDescription&) const { return true; } -ssize_t FullDevice::read(FileDescriptor&, byte* buffer, ssize_t size) +ssize_t FullDevice::read(FileDescription&, byte* buffer, ssize_t size) { ssize_t count = min(PAGE_SIZE, size); memset(buffer, 0, (size_t)count); return count; } -ssize_t FullDevice::write(FileDescriptor&, const byte*, ssize_t size) +ssize_t FullDevice::write(FileDescription&, const byte*, ssize_t size) { if (size == 0) return 0; diff --git a/Kernel/Devices/FullDevice.h b/Kernel/Devices/FullDevice.h index 9974e47c4d..fa4ffcb8bc 100644 --- a/Kernel/Devices/FullDevice.h +++ b/Kernel/Devices/FullDevice.h @@ -10,9 +10,9 @@ public: private: // ^CharacterDevice - virtual ssize_t read(FileDescriptor&, byte*, ssize_t) override; - virtual ssize_t write(FileDescriptor&, const byte*, ssize_t) override; - virtual bool can_read(FileDescriptor&) const override; - virtual bool can_write(FileDescriptor&) const override { return true; } + virtual ssize_t read(FileDescription&, byte*, ssize_t) override; + virtual ssize_t write(FileDescription&, const byte*, ssize_t) override; + virtual bool can_read(FileDescription&) const override; + virtual bool can_write(FileDescription&) const override { return true; } virtual const char* class_name() const override { return "FullDevice"; } }; diff --git a/Kernel/Devices/KeyboardDevice.cpp b/Kernel/Devices/KeyboardDevice.cpp index 856fcc2fb8..7a8464e598 100644 --- a/Kernel/Devices/KeyboardDevice.cpp +++ b/Kernel/Devices/KeyboardDevice.cpp @@ -208,12 +208,12 @@ KeyboardDevice::~KeyboardDevice() { } -bool KeyboardDevice::can_read(FileDescriptor&) const +bool KeyboardDevice::can_read(FileDescription&) const { return !m_queue.is_empty(); } -ssize_t KeyboardDevice::read(FileDescriptor&, byte* buffer, ssize_t size) +ssize_t KeyboardDevice::read(FileDescription&, byte* buffer, ssize_t size) { ssize_t nread = 0; while (nread < size) { @@ -229,7 +229,7 @@ ssize_t KeyboardDevice::read(FileDescriptor&, byte* buffer, ssize_t size) return nread; } -ssize_t KeyboardDevice::write(FileDescriptor&, const byte*, ssize_t) +ssize_t KeyboardDevice::write(FileDescription&, const byte*, ssize_t) { return 0; } diff --git a/Kernel/Devices/KeyboardDevice.h b/Kernel/Devices/KeyboardDevice.h index 16f134b2a7..1edffe3869 100644 --- a/Kernel/Devices/KeyboardDevice.h +++ b/Kernel/Devices/KeyboardDevice.h @@ -23,10 +23,10 @@ public: void set_client(KeyboardClient* client) { m_client = client; } // ^CharacterDevice - virtual ssize_t read(FileDescriptor&, byte* buffer, ssize_t) override; - virtual bool can_read(FileDescriptor&) const override; - virtual ssize_t write(FileDescriptor&, const byte* buffer, ssize_t) override; - virtual bool can_write(FileDescriptor&) const override { return true; } + virtual ssize_t read(FileDescription&, byte* buffer, ssize_t) override; + virtual bool can_read(FileDescription&) const override; + virtual ssize_t write(FileDescription&, const byte* buffer, ssize_t) override; + virtual bool can_write(FileDescription&) const override { return true; } private: // ^IRQHandler diff --git a/Kernel/Devices/NullDevice.cpp b/Kernel/Devices/NullDevice.cpp index e93bd55891..c04f84e1ca 100644 --- a/Kernel/Devices/NullDevice.cpp +++ b/Kernel/Devices/NullDevice.cpp @@ -20,17 +20,17 @@ NullDevice::~NullDevice() { } -bool NullDevice::can_read(FileDescriptor&) const +bool NullDevice::can_read(FileDescription&) const { return true; } -ssize_t NullDevice::read(FileDescriptor&, byte*, ssize_t) +ssize_t NullDevice::read(FileDescription&, byte*, ssize_t) { return 0; } -ssize_t NullDevice::write(FileDescriptor&, const byte*, ssize_t buffer_size) +ssize_t NullDevice::write(FileDescription&, const byte*, ssize_t buffer_size) { return min(PAGE_SIZE, buffer_size); } diff --git a/Kernel/Devices/NullDevice.h b/Kernel/Devices/NullDevice.h index 47ba7baf5a..964565c690 100644 --- a/Kernel/Devices/NullDevice.h +++ b/Kernel/Devices/NullDevice.h @@ -12,9 +12,9 @@ public: private: // ^CharacterDevice - virtual ssize_t read(FileDescriptor&, byte*, ssize_t) override; - virtual ssize_t write(FileDescriptor&, const byte*, ssize_t) override; - virtual bool can_write(FileDescriptor&) const override { return true; } - virtual bool can_read(FileDescriptor&) const override; + virtual ssize_t read(FileDescription&, byte*, ssize_t) override; + virtual ssize_t write(FileDescription&, const byte*, ssize_t) override; + virtual bool can_write(FileDescription&) const override { return true; } + virtual bool can_read(FileDescription&) const override; virtual const char* class_name() const override { return "NullDevice"; } }; diff --git a/Kernel/Devices/PS2MouseDevice.cpp b/Kernel/Devices/PS2MouseDevice.cpp index c7d8ff54f5..a7f2fe296d 100644 --- a/Kernel/Devices/PS2MouseDevice.cpp +++ b/Kernel/Devices/PS2MouseDevice.cpp @@ -218,12 +218,12 @@ byte PS2MouseDevice::mouse_read() return IO::in8(0x60); } -bool PS2MouseDevice::can_read(FileDescriptor&) const +bool PS2MouseDevice::can_read(FileDescription&) const { return !m_queue.is_empty(); } -ssize_t PS2MouseDevice::read(FileDescriptor&, byte* buffer, ssize_t size) +ssize_t PS2MouseDevice::read(FileDescription&, byte* buffer, ssize_t size) { ssize_t nread = 0; while (nread < size) { @@ -239,7 +239,7 @@ ssize_t PS2MouseDevice::read(FileDescriptor&, byte* buffer, ssize_t size) return nread; } -ssize_t PS2MouseDevice::write(FileDescriptor&, const byte*, ssize_t) +ssize_t PS2MouseDevice::write(FileDescription&, const byte*, ssize_t) { return 0; } diff --git a/Kernel/Devices/PS2MouseDevice.h b/Kernel/Devices/PS2MouseDevice.h index de97cfe4e1..e63db8a998 100644 --- a/Kernel/Devices/PS2MouseDevice.h +++ b/Kernel/Devices/PS2MouseDevice.h @@ -14,10 +14,10 @@ public: static PS2MouseDevice& the(); // ^CharacterDevice - virtual bool can_read(FileDescriptor&) const override; - virtual ssize_t read(FileDescriptor&, byte*, ssize_t) override; - virtual ssize_t write(FileDescriptor&, const byte*, ssize_t) override; - virtual bool can_write(FileDescriptor&) const override { return true; } + virtual bool can_read(FileDescription&) const override; + virtual ssize_t read(FileDescription&, byte*, ssize_t) override; + virtual ssize_t write(FileDescription&, const byte*, ssize_t) override; + virtual bool can_write(FileDescription&) const override { return true; } private: // ^IRQHandler diff --git a/Kernel/Devices/RandomDevice.cpp b/Kernel/Devices/RandomDevice.cpp index 354212fbcd..3e3cfdd023 100644 --- a/Kernel/Devices/RandomDevice.cpp +++ b/Kernel/Devices/RandomDevice.cpp @@ -26,12 +26,12 @@ static void mysrand(unsigned seed) } #endif -bool RandomDevice::can_read(FileDescriptor&) const +bool RandomDevice::can_read(FileDescription&) const { return true; } -ssize_t RandomDevice::read(FileDescriptor&, byte* buffer, ssize_t size) +ssize_t RandomDevice::read(FileDescription&, byte* buffer, ssize_t size) { const int range = 'z' - 'a'; ssize_t nread = min(size, PAGE_SIZE); @@ -42,7 +42,7 @@ ssize_t RandomDevice::read(FileDescriptor&, byte* buffer, ssize_t size) return nread; } -ssize_t RandomDevice::write(FileDescriptor&, const byte*, ssize_t size) +ssize_t RandomDevice::write(FileDescription&, const byte*, ssize_t size) { // FIXME: Use input for entropy? I guess that could be a neat feature? return min(PAGE_SIZE, size); diff --git a/Kernel/Devices/RandomDevice.h b/Kernel/Devices/RandomDevice.h index ecce3c6bfb..4d6dce159e 100644 --- a/Kernel/Devices/RandomDevice.h +++ b/Kernel/Devices/RandomDevice.h @@ -12,9 +12,9 @@ public: private: // ^CharacterDevice - virtual ssize_t read(FileDescriptor&, byte*, ssize_t) override; - virtual ssize_t write(FileDescriptor&, const byte*, ssize_t) override; - virtual bool can_read(FileDescriptor&) const override; - virtual bool can_write(FileDescriptor&) const override { return true; } + virtual ssize_t read(FileDescription&, byte*, ssize_t) override; + virtual ssize_t write(FileDescription&, const byte*, ssize_t) override; + virtual bool can_read(FileDescription&) const override; + virtual bool can_write(FileDescription&) const override { return true; } virtual const char* class_name() const override { return "RandomDevice"; } }; diff --git a/Kernel/Devices/ZeroDevice.cpp b/Kernel/Devices/ZeroDevice.cpp index ee809045bc..aa9e98e3a8 100644 --- a/Kernel/Devices/ZeroDevice.cpp +++ b/Kernel/Devices/ZeroDevice.cpp @@ -11,19 +11,19 @@ ZeroDevice::~ZeroDevice() { } -bool ZeroDevice::can_read(FileDescriptor&) const +bool ZeroDevice::can_read(FileDescription&) const { return true; } -ssize_t ZeroDevice::read(FileDescriptor&, byte* buffer, ssize_t size) +ssize_t ZeroDevice::read(FileDescription&, byte* buffer, ssize_t size) { ssize_t count = min(PAGE_SIZE, size); memset(buffer, 0, (size_t)count); return count; } -ssize_t ZeroDevice::write(FileDescriptor&, const byte*, ssize_t size) +ssize_t ZeroDevice::write(FileDescription&, const byte*, ssize_t size) { return min(PAGE_SIZE, size); } diff --git a/Kernel/Devices/ZeroDevice.h b/Kernel/Devices/ZeroDevice.h index 930f3adec2..631fdd8965 100644 --- a/Kernel/Devices/ZeroDevice.h +++ b/Kernel/Devices/ZeroDevice.h @@ -10,9 +10,9 @@ public: private: // ^CharacterDevice - virtual ssize_t read(FileDescriptor&, byte*, ssize_t) override; - virtual ssize_t write(FileDescriptor&, const byte*, ssize_t) override; - virtual bool can_read(FileDescriptor&) const override; - virtual bool can_write(FileDescriptor&) const override { return true; } + virtual ssize_t read(FileDescription&, byte*, ssize_t) override; + virtual ssize_t write(FileDescription&, const byte*, ssize_t) override; + virtual bool can_read(FileDescription&) const override; + virtual bool can_write(FileDescription&) const override { return true; } virtual const char* class_name() const override { return "ZeroDevice"; } }; diff --git a/Kernel/File.cpp b/Kernel/File.cpp index ffc64bec9d..c0e4d37aea 100644 --- a/Kernel/File.cpp +++ b/Kernel/File.cpp @@ -1,5 +1,5 @@ #include -#include +#include File::File() { @@ -9,22 +9,22 @@ File::~File() { } -KResultOr> File::open(int options) +KResultOr> File::open(int options) { UNUSED_PARAM(options); - return FileDescriptor::create(this); + return FileDescription::create(this); } void File::close() { } -int File::ioctl(FileDescriptor&, unsigned, unsigned) +int File::ioctl(FileDescription&, unsigned, unsigned) { return -ENOTTY; } -KResultOr File::mmap(Process&, FileDescriptor&, LinearAddress, size_t, size_t, int) +KResultOr File::mmap(Process&, FileDescription&, LinearAddress, size_t, size_t, int) { return KResult(-ENODEV); } diff --git a/Kernel/File.h b/Kernel/File.h index 8a74b3cde1..4211c40db5 100644 --- a/Kernel/File.h +++ b/Kernel/File.h @@ -8,11 +8,11 @@ #include #include -class FileDescriptor; +class FileDescription; class Process; class Region; -// File is the base class for anything that can be referenced by a FileDescriptor. +// File is the base class for anything that can be referenced by a FileDescription. // // The most important functions in File are: // @@ -43,18 +43,18 @@ class File : public Retainable { public: virtual ~File(); - virtual KResultOr> open(int options); + virtual KResultOr> open(int options); virtual void close(); - virtual bool can_read(FileDescriptor&) const = 0; - virtual bool can_write(FileDescriptor&) const = 0; + virtual bool can_read(FileDescription&) const = 0; + virtual bool can_write(FileDescription&) const = 0; - virtual ssize_t read(FileDescriptor&, byte*, ssize_t) = 0; - virtual ssize_t write(FileDescriptor&, const byte*, ssize_t) = 0; - virtual int ioctl(FileDescriptor&, unsigned request, unsigned arg); - virtual KResultOr mmap(Process&, FileDescriptor&, LinearAddress preferred_laddr, size_t offset, size_t size, int prot); + virtual ssize_t read(FileDescription&, byte*, ssize_t) = 0; + virtual ssize_t write(FileDescription&, const byte*, ssize_t) = 0; + virtual int ioctl(FileDescription&, unsigned request, unsigned arg); + virtual KResultOr mmap(Process&, FileDescription&, LinearAddress preferred_laddr, size_t offset, size_t size, int prot); - virtual String absolute_path(const FileDescriptor&) const = 0; + virtual String absolute_path(const FileDescription&) const = 0; virtual KResult truncate(off_t) { return KResult(-EINVAL); } diff --git a/Kernel/FileSystem/Ext2FileSystem.cpp b/Kernel/FileSystem/Ext2FileSystem.cpp index f54606da35..a17fa9b2df 100644 --- a/Kernel/FileSystem/Ext2FileSystem.cpp +++ b/Kernel/FileSystem/Ext2FileSystem.cpp @@ -479,7 +479,7 @@ RetainPtr Ext2FS::get_inode(InodeIdentifier inode) const return new_inode; } -ssize_t Ext2FSInode::read_bytes(off_t offset, ssize_t count, byte* buffer, FileDescriptor*) const +ssize_t Ext2FSInode::read_bytes(off_t offset, ssize_t count, byte* buffer, FileDescription*) const { Locker inode_locker(m_lock); ASSERT(offset >= 0); @@ -585,7 +585,7 @@ bool Ext2FSInode::resize(qword new_size) return true; } -ssize_t Ext2FSInode::write_bytes(off_t offset, ssize_t count, const byte* data, FileDescriptor*) +ssize_t Ext2FSInode::write_bytes(off_t offset, ssize_t count, const byte* data, FileDescription*) { ASSERT(offset >= 0); ASSERT(count >= 0); diff --git a/Kernel/FileSystem/Ext2FileSystem.h b/Kernel/FileSystem/Ext2FileSystem.h index 1d8aa0ebc0..5ac452dbe4 100644 --- a/Kernel/FileSystem/Ext2FileSystem.h +++ b/Kernel/FileSystem/Ext2FileSystem.h @@ -25,12 +25,12 @@ public: private: // ^Inode - virtual ssize_t read_bytes(off_t, ssize_t, byte* buffer, FileDescriptor*) const override; + virtual ssize_t read_bytes(off_t, ssize_t, byte* buffer, FileDescription*) const override; virtual InodeMetadata metadata() const override; virtual bool traverse_as_directory(Function) const override; virtual InodeIdentifier lookup(StringView name) override; virtual void flush_metadata() override; - virtual ssize_t write_bytes(off_t, ssize_t, const byte* data, FileDescriptor*) override; + virtual ssize_t write_bytes(off_t, ssize_t, const byte* data, FileDescription*) override; virtual KResult add_child(InodeIdentifier child_id, const String& name, mode_t) override; virtual KResult remove_child(const String& name) override; virtual int set_atime(time_t) override; diff --git a/Kernel/FileSystem/FIFO.cpp b/Kernel/FileSystem/FIFO.cpp index 344dcee87e..e14689e763 100644 --- a/Kernel/FileSystem/FIFO.cpp +++ b/Kernel/FileSystem/FIFO.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include #include @@ -30,9 +30,9 @@ Retained FIFO::create(uid_t uid) return adopt(*new FIFO(uid)); } -Retained FIFO::open_direction(FIFO::Direction direction) +Retained FIFO::open_direction(FIFO::Direction direction) { - auto descriptor = FileDescriptor::create(this); + auto descriptor = FileDescription::create(this); attach(direction); descriptor->set_fifo_direction({ }, direction); return descriptor; @@ -83,17 +83,17 @@ void FIFO::detach(Direction direction) } } -bool FIFO::can_read(FileDescriptor&) const +bool FIFO::can_read(FileDescription&) const { return !m_buffer.is_empty() || !m_writers; } -bool FIFO::can_write(FileDescriptor&) const +bool FIFO::can_write(FileDescription&) const { return m_buffer.bytes_in_write_buffer() < 4096 || !m_readers; } -ssize_t FIFO::read(FileDescriptor&, byte* buffer, ssize_t size) +ssize_t FIFO::read(FileDescription&, byte* buffer, ssize_t size) { if (!m_writers && m_buffer.is_empty()) return 0; @@ -107,7 +107,7 @@ ssize_t FIFO::read(FileDescriptor&, byte* buffer, ssize_t size) return nread; } -ssize_t FIFO::write(FileDescriptor&, const byte* buffer, ssize_t size) +ssize_t FIFO::write(FileDescription&, const byte* buffer, ssize_t size) { if (!m_readers) { current->process().send_signal(SIGPIPE, ¤t->process()); @@ -119,7 +119,7 @@ ssize_t FIFO::write(FileDescriptor&, const byte* buffer, ssize_t size) return m_buffer.write(buffer, size); } -String FIFO::absolute_path(const FileDescriptor&) const +String FIFO::absolute_path(const FileDescription&) const { return String::format("fifo:%u", this); } diff --git a/Kernel/FileSystem/FIFO.h b/Kernel/FileSystem/FIFO.h index 50e1c88ea4..8cbb60513a 100644 --- a/Kernel/FileSystem/FIFO.h +++ b/Kernel/FileSystem/FIFO.h @@ -4,7 +4,7 @@ #include #include -class FileDescriptor; +class FileDescription; class FIFO final : public File { public: @@ -22,18 +22,18 @@ public: uid_t uid() const { return m_uid; } - Retained open_direction(Direction); + Retained open_direction(Direction); void attach(Direction); void detach(Direction); private: // ^File - virtual ssize_t write(FileDescriptor&, const byte*, ssize_t) override; - virtual ssize_t read(FileDescriptor&, byte*, ssize_t) override; - virtual bool can_read(FileDescriptor&) const override; - virtual bool can_write(FileDescriptor&) const override; - virtual String absolute_path(const FileDescriptor&) const override; + virtual ssize_t write(FileDescription&, const byte*, ssize_t) override; + virtual ssize_t read(FileDescription&, byte*, ssize_t) override; + virtual bool can_read(FileDescription&) const override; + virtual bool can_write(FileDescription&) const override; + virtual String absolute_path(const FileDescription&) const override; virtual const char* class_name() const override { return "FIFO"; } virtual bool is_fifo() const override { return true; } diff --git a/Kernel/FileSystem/FileDescription.cpp b/Kernel/FileSystem/FileDescription.cpp new file mode 100644 index 0000000000..d62e573d3b --- /dev/null +++ b/Kernel/FileSystem/FileDescription.cpp @@ -0,0 +1,333 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +Retained FileDescription::create(RetainPtr&& custody) +{ + auto descriptor = adopt(*new FileDescription(InodeFile::create(custody->inode()))); + descriptor->m_custody = move(custody); + return descriptor; +} + +Retained FileDescription::create(RetainPtr&& file, SocketRole role) +{ + return adopt(*new FileDescription(move(file), role)); +} + +FileDescription::FileDescription(RetainPtr&& file, SocketRole role) + : m_file(move(file)) +{ + if (m_file->is_inode()) + m_inode = static_cast(*m_file).inode(); + set_socket_role(role); +} + +FileDescription::~FileDescription() +{ + if (is_socket()) + socket()->detach(*this); + if (is_fifo()) + static_cast(m_file.ptr())->detach(m_fifo_direction); + m_file->close(); + m_file = nullptr; + m_inode = nullptr; +} + +void FileDescription::set_socket_role(SocketRole role) +{ + if (role == m_socket_role) + return; + + ASSERT(is_socket()); + if (m_socket_role != SocketRole::None) + socket()->detach(*this); + m_socket_role = role; + socket()->attach(*this); +} + +Retained FileDescription::clone() +{ + RetainPtr descriptor; + if (is_fifo()) { + descriptor = fifo()->open_direction(m_fifo_direction); + } else { + descriptor = FileDescription::create(m_file.copy_ref(), m_socket_role); + descriptor->m_custody = m_custody.copy_ref(); + descriptor->m_inode = m_inode.copy_ref(); + } + ASSERT(descriptor); + descriptor->m_current_offset = m_current_offset; + descriptor->m_is_blocking = m_is_blocking; + descriptor->m_should_append = m_should_append; + descriptor->m_file_flags = m_file_flags; + return *descriptor; +} + +KResult FileDescription::fstat(stat& buffer) +{ + ASSERT(!is_fifo()); + if (!m_inode) + return KResult(-EBADF); + return metadata().stat(buffer); +} + +KResult FileDescription::fchmod(mode_t mode) +{ + if (!m_inode) + return KResult(-EBADF); + return VFS::the().chmod(*m_inode, mode); +} + +off_t FileDescription::seek(off_t offset, int whence) +{ + if (!m_file->is_seekable()) + return -EINVAL; + + auto metadata = this->metadata(); + if (!metadata.is_valid()) + return -EIO; + + if (metadata.is_socket() || metadata.is_fifo()) + return -ESPIPE; + + off_t new_offset; + + switch (whence) { + case SEEK_SET: + new_offset = offset; + break; + case SEEK_CUR: + new_offset = m_current_offset + offset; + break; + case SEEK_END: + new_offset = metadata.size; + break; + default: + return -EINVAL; + } + + if (new_offset < 0) + return -EINVAL; + // FIXME: Return -EINVAL if attempting to seek past the end of a seekable device. + + m_current_offset = new_offset; + return m_current_offset; +} + +ssize_t FileDescription::read(byte* buffer, ssize_t count) +{ + int nread = m_file->read(*this, buffer, count); + if (m_file->is_seekable()) + m_current_offset += nread; + return nread; +} + +ssize_t FileDescription::write(const byte* data, ssize_t size) +{ + int nwritten = m_file->write(*this, data, size); + if (m_file->is_seekable()) + m_current_offset += nwritten; + return nwritten; +} + +bool FileDescription::can_write() +{ + return m_file->can_write(*this); +} + +bool FileDescription::can_read() +{ + return m_file->can_read(*this); +} + +ByteBuffer FileDescription::read_entire_file() +{ + // HACK ALERT: (This entire function) + ASSERT(m_file->is_inode()); + ASSERT(m_inode); + return m_inode->read_entire(this); +} + +bool FileDescription::is_directory() const +{ + ASSERT(!is_fifo()); + return metadata().is_directory(); +} + +ssize_t FileDescription::get_dir_entries(byte* buffer, ssize_t size) +{ + auto metadata = this->metadata(); + if (!metadata.is_valid()) + return -EIO; + if (!metadata.is_directory()) + return -ENOTDIR; + + int size_to_allocate = max(PAGE_SIZE, metadata.size); + + auto temp_buffer = ByteBuffer::create_uninitialized(size_to_allocate); + BufferStream stream(temp_buffer); + VFS::the().traverse_directory_inode(*m_inode, [&stream] (auto& entry) { + stream << (dword)entry.inode.index(); + stream << (byte)entry.file_type; + stream << (dword)entry.name_length; + stream << entry.name; + return true; + }); + stream.snip(); + + if (size < temp_buffer.size()) + return -1; + + memcpy(buffer, temp_buffer.pointer(), temp_buffer.size()); + return stream.offset(); +} + +bool FileDescription::is_device() const +{ + return m_file->is_device(); +} + +bool FileDescription::is_tty() const +{ + return m_file->is_tty(); +} + +const TTY* FileDescription::tty() const +{ + if (!is_tty()) + return nullptr; + return static_cast(m_file.ptr()); +} + +TTY* FileDescription::tty() +{ + if (!is_tty()) + return nullptr; + return static_cast(m_file.ptr()); +} + +bool FileDescription::is_master_pty() const +{ + return m_file->is_master_pty(); +} + +const MasterPTY* FileDescription::master_pty() const +{ + if (!is_master_pty()) + return nullptr; + return static_cast(m_file.ptr()); +} + +MasterPTY* FileDescription::master_pty() +{ + if (!is_master_pty()) + return nullptr; + return static_cast(m_file.ptr()); +} + +int FileDescription::close() +{ + return 0; +} + +String FileDescription::absolute_path() const +{ + if (m_custody) + return m_custody->absolute_path(); + dbgprintf("FileDescription::absolute_path() for FD without custody, File type: %s\n", m_file->class_name()); + return m_file->absolute_path(*this); +} + +InodeMetadata FileDescription::metadata() const +{ + if (m_inode) + return m_inode->metadata(); + return { }; +} + +KResultOr FileDescription::mmap(Process& process, LinearAddress laddr, size_t offset, size_t size, int prot) +{ + return m_file->mmap(process, *this, laddr, offset, size, prot); +} + +KResult FileDescription::truncate(off_t length) +{ + return m_file->truncate(length); +} + +bool FileDescription::is_shared_memory() const +{ + return m_file->is_shared_memory(); +} + +SharedMemory* FileDescription::shared_memory() +{ + if (!is_shared_memory()) + return nullptr; + return static_cast(m_file.ptr()); +} + +const SharedMemory* FileDescription::shared_memory() const +{ + if (!is_shared_memory()) + return nullptr; + return static_cast(m_file.ptr()); +} + +bool FileDescription::is_fifo() const +{ + return m_file->is_fifo(); +} + +FIFO* FileDescription::fifo() +{ + if (!is_fifo()) + return nullptr; + return static_cast(m_file.ptr()); +} + +bool FileDescription::is_socket() const +{ + return m_file->is_socket(); +} + +Socket* FileDescription::socket() +{ + if (!is_socket()) + return nullptr; + return static_cast(m_file.ptr()); +} + +const Socket* FileDescription::socket() const +{ + if (!is_socket()) + return nullptr; + return static_cast(m_file.ptr()); +} + +void FileDescription::set_file_flags(dword flags) +{ + m_is_blocking = !(flags & O_NONBLOCK); + m_should_append = flags & O_APPEND; + m_file_flags = flags; +} + +KResult FileDescription::chown(uid_t uid, gid_t gid) +{ + if (!m_inode) + return KResult(-EINVAL); + return VFS::the().chown(*m_inode, uid, gid); +} diff --git a/Kernel/FileSystem/FileDescription.h b/Kernel/FileSystem/FileDescription.h new file mode 100644 index 0000000000..7c1d1ef4bb --- /dev/null +++ b/Kernel/FileSystem/FileDescription.h @@ -0,0 +1,125 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class File; +class TTY; +class MasterPTY; +class Process; +class Region; +class CharacterDevice; +class SharedMemory; + +class FileDescription : public Retainable { +public: + static Retained create(RetainPtr&&); + static Retained create(RetainPtr&&, SocketRole = SocketRole::None); + ~FileDescription(); + + Retained clone(); + + int close(); + + off_t seek(off_t, int whence); + ssize_t read(byte*, ssize_t); + ssize_t write(const byte* data, ssize_t); + KResult fstat(stat&); + + KResult fchmod(mode_t); + + bool can_read(); + bool can_write(); + + ssize_t get_dir_entries(byte* buffer, ssize_t); + + ByteBuffer read_entire_file(); + + String absolute_path() const; + + bool is_directory() const; + + File& file() { return *m_file; } + const File& file() const { return *m_file; } + + bool is_device() const; + + bool is_tty() const; + const TTY* tty() const; + TTY* tty(); + + bool is_master_pty() const; + const MasterPTY* master_pty() const; + MasterPTY* master_pty(); + + InodeMetadata metadata() const; + Inode* inode() { return m_inode.ptr(); } + const Inode* inode() const { return m_inode.ptr(); } + + Custody* custody() { return m_custody.ptr(); } + const Custody* custody() const { return m_custody.ptr(); } + + KResultOr mmap(Process&, LinearAddress, size_t offset, size_t, int prot); + + bool is_blocking() const { return m_is_blocking; } + void set_blocking(bool b) { m_is_blocking = b; } + bool should_append() const { return m_should_append; } + void set_should_append(bool s) { m_should_append = s; } + + dword file_flags() const { return m_file_flags; } + void set_file_flags(dword); + + bool is_socket() const; + Socket* socket(); + const Socket* socket() const; + + bool is_fifo() const; + FIFO* fifo(); + FIFO::Direction fifo_direction() { return m_fifo_direction; } + void set_fifo_direction(Badge, FIFO::Direction direction) { m_fifo_direction = direction; } + + bool is_shared_memory() const; + SharedMemory* shared_memory(); + const SharedMemory* shared_memory() const; + + ByteBuffer& generator_cache() { return m_generator_cache; } + + void set_original_inode(Badge, Retained&& inode) { m_inode = move(inode); } + + SocketRole socket_role() const { return m_socket_role; } + void set_socket_role(SocketRole); + + KResult truncate(off_t); + + off_t offset() const { return m_current_offset; } + + KResult chown(uid_t, gid_t); + +private: + friend class VFS; + FileDescription(RetainPtr&&, SocketRole = SocketRole::None); + FileDescription(FIFO&, FIFO::Direction); + + RetainPtr m_custody; + RetainPtr m_inode; + RetainPtr m_file; + + off_t m_current_offset { 0 }; + + ByteBuffer m_generator_cache; + + dword m_file_flags { 0 }; + + bool m_is_blocking { true }; + bool m_should_append { false }; + SocketRole m_socket_role { SocketRole::None }; + FIFO::Direction m_fifo_direction { FIFO::Direction::Neither }; +}; diff --git a/Kernel/FileSystem/FileDescriptor.cpp b/Kernel/FileSystem/FileDescriptor.cpp deleted file mode 100644 index f760792757..0000000000 --- a/Kernel/FileSystem/FileDescriptor.cpp +++ /dev/null @@ -1,333 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -Retained FileDescriptor::create(RetainPtr&& custody) -{ - auto descriptor = adopt(*new FileDescriptor(InodeFile::create(custody->inode()))); - descriptor->m_custody = move(custody); - return descriptor; -} - -Retained FileDescriptor::create(RetainPtr&& file, SocketRole role) -{ - return adopt(*new FileDescriptor(move(file), role)); -} - -FileDescriptor::FileDescriptor(RetainPtr&& file, SocketRole role) - : m_file(move(file)) -{ - if (m_file->is_inode()) - m_inode = static_cast(*m_file).inode(); - set_socket_role(role); -} - -FileDescriptor::~FileDescriptor() -{ - if (is_socket()) - socket()->detach(*this); - if (is_fifo()) - static_cast(m_file.ptr())->detach(m_fifo_direction); - m_file->close(); - m_file = nullptr; - m_inode = nullptr; -} - -void FileDescriptor::set_socket_role(SocketRole role) -{ - if (role == m_socket_role) - return; - - ASSERT(is_socket()); - if (m_socket_role != SocketRole::None) - socket()->detach(*this); - m_socket_role = role; - socket()->attach(*this); -} - -Retained FileDescriptor::clone() -{ - RetainPtr descriptor; - if (is_fifo()) { - descriptor = fifo()->open_direction(m_fifo_direction); - } else { - descriptor = FileDescriptor::create(m_file.copy_ref(), m_socket_role); - descriptor->m_custody = m_custody.copy_ref(); - descriptor->m_inode = m_inode.copy_ref(); - } - ASSERT(descriptor); - descriptor->m_current_offset = m_current_offset; - descriptor->m_is_blocking = m_is_blocking; - descriptor->m_should_append = m_should_append; - descriptor->m_file_flags = m_file_flags; - return *descriptor; -} - -KResult FileDescriptor::fstat(stat& buffer) -{ - ASSERT(!is_fifo()); - if (!m_inode) - return KResult(-EBADF); - return metadata().stat(buffer); -} - -KResult FileDescriptor::fchmod(mode_t mode) -{ - if (!m_inode) - return KResult(-EBADF); - return VFS::the().chmod(*m_inode, mode); -} - -off_t FileDescriptor::seek(off_t offset, int whence) -{ - if (!m_file->is_seekable()) - return -EINVAL; - - auto metadata = this->metadata(); - if (!metadata.is_valid()) - return -EIO; - - if (metadata.is_socket() || metadata.is_fifo()) - return -ESPIPE; - - off_t new_offset; - - switch (whence) { - case SEEK_SET: - new_offset = offset; - break; - case SEEK_CUR: - new_offset = m_current_offset + offset; - break; - case SEEK_END: - new_offset = metadata.size; - break; - default: - return -EINVAL; - } - - if (new_offset < 0) - return -EINVAL; - // FIXME: Return -EINVAL if attempting to seek past the end of a seekable device. - - m_current_offset = new_offset; - return m_current_offset; -} - -ssize_t FileDescriptor::read(byte* buffer, ssize_t count) -{ - int nread = m_file->read(*this, buffer, count); - if (m_file->is_seekable()) - m_current_offset += nread; - return nread; -} - -ssize_t FileDescriptor::write(const byte* data, ssize_t size) -{ - int nwritten = m_file->write(*this, data, size); - if (m_file->is_seekable()) - m_current_offset += nwritten; - return nwritten; -} - -bool FileDescriptor::can_write() -{ - return m_file->can_write(*this); -} - -bool FileDescriptor::can_read() -{ - return m_file->can_read(*this); -} - -ByteBuffer FileDescriptor::read_entire_file() -{ - // HACK ALERT: (This entire function) - ASSERT(m_file->is_inode()); - ASSERT(m_inode); - return m_inode->read_entire(this); -} - -bool FileDescriptor::is_directory() const -{ - ASSERT(!is_fifo()); - return metadata().is_directory(); -} - -ssize_t FileDescriptor::get_dir_entries(byte* buffer, ssize_t size) -{ - auto metadata = this->metadata(); - if (!metadata.is_valid()) - return -EIO; - if (!metadata.is_directory()) - return -ENOTDIR; - - int size_to_allocate = max(PAGE_SIZE, metadata.size); - - auto temp_buffer = ByteBuffer::create_uninitialized(size_to_allocate); - BufferStream stream(temp_buffer); - VFS::the().traverse_directory_inode(*m_inode, [&stream] (auto& entry) { - stream << (dword)entry.inode.index(); - stream << (byte)entry.file_type; - stream << (dword)entry.name_length; - stream << entry.name; - return true; - }); - stream.snip(); - - if (size < temp_buffer.size()) - return -1; - - memcpy(buffer, temp_buffer.pointer(), temp_buffer.size()); - return stream.offset(); -} - -bool FileDescriptor::is_device() const -{ - return m_file->is_device(); -} - -bool FileDescriptor::is_tty() const -{ - return m_file->is_tty(); -} - -const TTY* FileDescriptor::tty() const -{ - if (!is_tty()) - return nullptr; - return static_cast(m_file.ptr()); -} - -TTY* FileDescriptor::tty() -{ - if (!is_tty()) - return nullptr; - return static_cast(m_file.ptr()); -} - -bool FileDescriptor::is_master_pty() const -{ - return m_file->is_master_pty(); -} - -const MasterPTY* FileDescriptor::master_pty() const -{ - if (!is_master_pty()) - return nullptr; - return static_cast(m_file.ptr()); -} - -MasterPTY* FileDescriptor::master_pty() -{ - if (!is_master_pty()) - return nullptr; - return static_cast(m_file.ptr()); -} - -int FileDescriptor::close() -{ - return 0; -} - -String FileDescriptor::absolute_path() const -{ - if (m_custody) - return m_custody->absolute_path(); - dbgprintf("FileDescriptor::absolute_path() for FD without custody, File type: %s\n", m_file->class_name()); - return m_file->absolute_path(*this); -} - -InodeMetadata FileDescriptor::metadata() const -{ - if (m_inode) - return m_inode->metadata(); - return { }; -} - -KResultOr FileDescriptor::mmap(Process& process, LinearAddress laddr, size_t offset, size_t size, int prot) -{ - return m_file->mmap(process, *this, laddr, offset, size, prot); -} - -KResult FileDescriptor::truncate(off_t length) -{ - return m_file->truncate(length); -} - -bool FileDescriptor::is_shared_memory() const -{ - return m_file->is_shared_memory(); -} - -SharedMemory* FileDescriptor::shared_memory() -{ - if (!is_shared_memory()) - return nullptr; - return static_cast(m_file.ptr()); -} - -const SharedMemory* FileDescriptor::shared_memory() const -{ - if (!is_shared_memory()) - return nullptr; - return static_cast(m_file.ptr()); -} - -bool FileDescriptor::is_fifo() const -{ - return m_file->is_fifo(); -} - -FIFO* FileDescriptor::fifo() -{ - if (!is_fifo()) - return nullptr; - return static_cast(m_file.ptr()); -} - -bool FileDescriptor::is_socket() const -{ - return m_file->is_socket(); -} - -Socket* FileDescriptor::socket() -{ - if (!is_socket()) - return nullptr; - return static_cast(m_file.ptr()); -} - -const Socket* FileDescriptor::socket() const -{ - if (!is_socket()) - return nullptr; - return static_cast(m_file.ptr()); -} - -void FileDescriptor::set_file_flags(dword flags) -{ - m_is_blocking = !(flags & O_NONBLOCK); - m_should_append = flags & O_APPEND; - m_file_flags = flags; -} - -KResult FileDescriptor::chown(uid_t uid, gid_t gid) -{ - if (!m_inode) - return KResult(-EINVAL); - return VFS::the().chown(*m_inode, uid, gid); -} diff --git a/Kernel/FileSystem/FileDescriptor.h b/Kernel/FileSystem/FileDescriptor.h deleted file mode 100644 index 7d8cdf8d7d..0000000000 --- a/Kernel/FileSystem/FileDescriptor.h +++ /dev/null @@ -1,125 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -class File; -class TTY; -class MasterPTY; -class Process; -class Region; -class CharacterDevice; -class SharedMemory; - -class FileDescriptor : public Retainable { -public: - static Retained create(RetainPtr&&); - static Retained create(RetainPtr&&, SocketRole = SocketRole::None); - ~FileDescriptor(); - - Retained clone(); - - int close(); - - off_t seek(off_t, int whence); - ssize_t read(byte*, ssize_t); - ssize_t write(const byte* data, ssize_t); - KResult fstat(stat&); - - KResult fchmod(mode_t); - - bool can_read(); - bool can_write(); - - ssize_t get_dir_entries(byte* buffer, ssize_t); - - ByteBuffer read_entire_file(); - - String absolute_path() const; - - bool is_directory() const; - - File& file() { return *m_file; } - const File& file() const { return *m_file; } - - bool is_device() const; - - bool is_tty() const; - const TTY* tty() const; - TTY* tty(); - - bool is_master_pty() const; - const MasterPTY* master_pty() const; - MasterPTY* master_pty(); - - InodeMetadata metadata() const; - Inode* inode() { return m_inode.ptr(); } - const Inode* inode() const { return m_inode.ptr(); } - - Custody* custody() { return m_custody.ptr(); } - const Custody* custody() const { return m_custody.ptr(); } - - KResultOr mmap(Process&, LinearAddress, size_t offset, size_t, int prot); - - bool is_blocking() const { return m_is_blocking; } - void set_blocking(bool b) { m_is_blocking = b; } - bool should_append() const { return m_should_append; } - void set_should_append(bool s) { m_should_append = s; } - - dword file_flags() const { return m_file_flags; } - void set_file_flags(dword); - - bool is_socket() const; - Socket* socket(); - const Socket* socket() const; - - bool is_fifo() const; - FIFO* fifo(); - FIFO::Direction fifo_direction() { return m_fifo_direction; } - void set_fifo_direction(Badge, FIFO::Direction direction) { m_fifo_direction = direction; } - - bool is_shared_memory() const; - SharedMemory* shared_memory(); - const SharedMemory* shared_memory() const; - - ByteBuffer& generator_cache() { return m_generator_cache; } - - void set_original_inode(Badge, Retained&& inode) { m_inode = move(inode); } - - SocketRole socket_role() const { return m_socket_role; } - void set_socket_role(SocketRole); - - KResult truncate(off_t); - - off_t offset() const { return m_current_offset; } - - KResult chown(uid_t, gid_t); - -private: - friend class VFS; - FileDescriptor(RetainPtr&&, SocketRole = SocketRole::None); - FileDescriptor(FIFO&, FIFO::Direction); - - RetainPtr m_custody; - RetainPtr m_inode; - RetainPtr m_file; - - off_t m_current_offset { 0 }; - - ByteBuffer m_generator_cache; - - dword m_file_flags { 0 }; - - bool m_is_blocking { true }; - bool m_should_append { false }; - SocketRole m_socket_role { SocketRole::None }; - FIFO::Direction m_fifo_direction { FIFO::Direction::Neither }; -}; diff --git a/Kernel/FileSystem/FileSystem.h b/Kernel/FileSystem/FileSystem.h index 097d479b00..81d953c832 100644 --- a/Kernel/FileSystem/FileSystem.h +++ b/Kernel/FileSystem/FileSystem.h @@ -19,7 +19,7 @@ static const dword mepoch = 476763780; class Inode; -class FileDescriptor; +class FileDescription; class LocalSocket; class VMObject; diff --git a/Kernel/FileSystem/Inode.cpp b/Kernel/FileSystem/Inode.cpp index 38eb0395d1..2be2ec2ea6 100644 --- a/Kernel/FileSystem/Inode.cpp +++ b/Kernel/FileSystem/Inode.cpp @@ -28,7 +28,7 @@ void Inode::sync() } } -ByteBuffer Inode::read_entire(FileDescriptor* descriptor) const +ByteBuffer Inode::read_entire(FileDescription* descriptor) const { size_t initial_size = metadata().size ? metadata().size : 4096; StringBuilder builder(initial_size); diff --git a/Kernel/FileSystem/Inode.h b/Kernel/FileSystem/Inode.h index 8010597ccb..44f3b3666a 100644 --- a/Kernel/FileSystem/Inode.h +++ b/Kernel/FileSystem/Inode.h @@ -10,7 +10,7 @@ #include #include -class FileDescriptor; +class FileDescription; class LocalSocket; class VMObject; @@ -37,12 +37,12 @@ public: InodeIdentifier identifier() const { return { fsid(), index() }; } virtual InodeMetadata metadata() const = 0; - ByteBuffer read_entire(FileDescriptor* = nullptr) const; + ByteBuffer read_entire(FileDescription* = nullptr) const; - virtual ssize_t read_bytes(off_t, ssize_t, byte* buffer, FileDescriptor*) const = 0; + virtual ssize_t read_bytes(off_t, ssize_t, byte* buffer, FileDescription*) const = 0; virtual bool traverse_as_directory(Function) const = 0; virtual InodeIdentifier lookup(StringView name) = 0; - virtual ssize_t write_bytes(off_t, ssize_t, const byte* data, FileDescriptor*) = 0; + virtual ssize_t write_bytes(off_t, ssize_t, const byte* data, FileDescription*) = 0; virtual KResult add_child(InodeIdentifier child_id, const String& name, mode_t) = 0; virtual KResult remove_child(const String& name) = 0; virtual size_t directory_entry_count() const = 0; diff --git a/Kernel/FileSystem/InodeFile.cpp b/Kernel/FileSystem/InodeFile.cpp index f30fb655f1..577dec1a21 100644 --- a/Kernel/FileSystem/InodeFile.cpp +++ b/Kernel/FileSystem/InodeFile.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include #include #include @@ -13,17 +13,17 @@ InodeFile::~InodeFile() { } -ssize_t InodeFile::read(FileDescriptor& descriptor, byte* buffer, ssize_t count) +ssize_t InodeFile::read(FileDescription& descriptor, byte* buffer, ssize_t count) { return m_inode->read_bytes(descriptor.offset(), count, buffer, &descriptor); } -ssize_t InodeFile::write(FileDescriptor& descriptor, const byte* data, ssize_t count) +ssize_t InodeFile::write(FileDescription& descriptor, const byte* data, ssize_t count) { return m_inode->write_bytes(descriptor.offset(), count, data, &descriptor); } -KResultOr InodeFile::mmap(Process& process, FileDescriptor& descriptor, LinearAddress preferred_laddr, size_t offset, size_t size, int prot) +KResultOr InodeFile::mmap(Process& process, FileDescription& descriptor, LinearAddress preferred_laddr, size_t offset, size_t size, int prot) { ASSERT(offset == 0); // FIXME: If PROT_EXEC, check that the underlying file system isn't mounted noexec. @@ -34,7 +34,7 @@ KResultOr InodeFile::mmap(Process& process, FileDescriptor& descriptor, return region; } -String InodeFile::absolute_path(const FileDescriptor& descriptor) const +String InodeFile::absolute_path(const FileDescription& descriptor) const { ASSERT_NOT_REACHED(); ASSERT(descriptor.custody()); diff --git a/Kernel/FileSystem/InodeFile.h b/Kernel/FileSystem/InodeFile.h index 5522822d1e..cae2818697 100644 --- a/Kernel/FileSystem/InodeFile.h +++ b/Kernel/FileSystem/InodeFile.h @@ -16,14 +16,14 @@ public: const Inode& inode() const { return *m_inode; } Inode& inode() { return *m_inode; } - virtual bool can_read(FileDescriptor&) const override { return true; } - virtual bool can_write(FileDescriptor&) const override { return true; } + virtual bool can_read(FileDescription&) const override { return true; } + virtual bool can_write(FileDescription&) const override { return true; } - virtual ssize_t read(FileDescriptor&, byte*, ssize_t) override; - virtual ssize_t write(FileDescriptor&, const byte*, ssize_t) override; - virtual KResultOr mmap(Process&, FileDescriptor&, LinearAddress preferred_laddr, size_t offset, size_t size, int prot) override; + virtual ssize_t read(FileDescription&, byte*, ssize_t) override; + virtual ssize_t write(FileDescription&, const byte*, ssize_t) override; + virtual KResultOr mmap(Process&, FileDescription&, LinearAddress preferred_laddr, size_t offset, size_t size, int prot) override; - virtual String absolute_path(const FileDescriptor&) const override; + virtual String absolute_path(const FileDescription&) const override; virtual KResult truncate(off_t) override; diff --git a/Kernel/FileSystem/ProcFS.cpp b/Kernel/FileSystem/ProcFS.cpp index b09b89e163..73aeb43743 100644 --- a/Kernel/FileSystem/ProcFS.cpp +++ b/Kernel/FileSystem/ProcFS.cpp @@ -1,7 +1,7 @@ #include "ProcFS.h" #include "Process.h" #include -#include +#include #include #include #include "StdLib.h" @@ -189,7 +189,7 @@ ByteBuffer procfs$pid_fds(InodeIdentifier identifier) return { }; StringBuilder builder; for (int i = 0; i < process.max_open_file_descriptors(); ++i) { - auto* descriptor = process.file_descriptor(i); + auto* descriptor = process.file_description(i); if (!descriptor) continue; builder.appendf("% 3u %s\n", i, descriptor->absolute_path().characters()); @@ -204,7 +204,7 @@ ByteBuffer procfs$pid_fd_entry(InodeIdentifier identifier) return { }; auto& process = handle->process(); int fd = to_fd(identifier); - auto* descriptor = process.file_descriptor(fd); + auto* descriptor = process.file_description(fd); if (!descriptor) return { }; return descriptor->absolute_path().to_byte_buffer(); @@ -835,7 +835,7 @@ InodeMetadata ProcFSInode::metadata() const return metadata; } -ssize_t ProcFSInode::read_bytes(off_t offset, ssize_t count, byte* buffer, FileDescriptor* descriptor) const +ssize_t ProcFSInode::read_bytes(off_t offset, ssize_t count, byte* buffer, FileDescription* descriptor) const { #ifdef PROCFS_DEBUG dbgprintf("ProcFS: read_bytes %u\n", index()); @@ -941,7 +941,7 @@ bool ProcFSInode::traverse_as_directory(Functionprocess(); for (int i = 0; i < process.max_open_file_descriptors(); ++i) { - auto* descriptor = process.file_descriptor(i); + auto* descriptor = process.file_description(i); if (!descriptor) continue; char name[16]; @@ -1027,7 +1027,7 @@ InodeIdentifier ProcFSInode::lookup(StringView name) { InterruptDisabler disabler; if (auto* process = Process::from_pid(to_pid(identifier()))) - fd_exists = process->file_descriptor(name_as_number); + fd_exists = process->file_description(name_as_number); } if (fd_exists) @@ -1041,7 +1041,7 @@ void ProcFSInode::flush_metadata() { } -ssize_t ProcFSInode::write_bytes(off_t offset, ssize_t size, const byte* buffer, FileDescriptor*) +ssize_t ProcFSInode::write_bytes(off_t offset, ssize_t size, const byte* buffer, FileDescription*) { auto* directory_entry = fs().get_directory_entry(identifier()); if (!directory_entry || !directory_entry->write_callback) diff --git a/Kernel/FileSystem/ProcFS.h b/Kernel/FileSystem/ProcFS.h index 1ba73615d6..bb4e18eb80 100644 --- a/Kernel/FileSystem/ProcFS.h +++ b/Kernel/FileSystem/ProcFS.h @@ -80,12 +80,12 @@ public: private: // ^Inode - virtual ssize_t read_bytes(off_t, ssize_t, byte* buffer, FileDescriptor*) const override; + virtual ssize_t read_bytes(off_t, ssize_t, byte* buffer, FileDescription*) const override; virtual InodeMetadata metadata() const override; virtual bool traverse_as_directory(Function) const override; virtual InodeIdentifier lookup(StringView name) override; virtual void flush_metadata() override; - virtual ssize_t write_bytes(off_t, ssize_t, const byte* buffer, FileDescriptor*) override; + virtual ssize_t write_bytes(off_t, ssize_t, const byte* buffer, FileDescription*) override; virtual KResult add_child(InodeIdentifier child_id, const String& name, mode_t) override; virtual KResult remove_child(const String& name) override; virtual size_t directory_entry_count() const override; diff --git a/Kernel/FileSystem/SyntheticFileSystem.cpp b/Kernel/FileSystem/SyntheticFileSystem.cpp index 9dc2711319..86e2aed130 100644 --- a/Kernel/FileSystem/SyntheticFileSystem.cpp +++ b/Kernel/FileSystem/SyntheticFileSystem.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include @@ -185,7 +185,7 @@ InodeMetadata SynthFSInode::metadata() const return m_metadata; } -ssize_t SynthFSInode::read_bytes(off_t offset, ssize_t count, byte* buffer, FileDescriptor* descriptor) const +ssize_t SynthFSInode::read_bytes(off_t offset, ssize_t count, byte* buffer, FileDescription* descriptor) const { LOCKER(m_lock); #ifdef SYNTHFS_DEBUG @@ -250,7 +250,7 @@ void SynthFSInode::flush_metadata() { } -ssize_t SynthFSInode::write_bytes(off_t offset, ssize_t size, const byte* buffer, FileDescriptor*) +ssize_t SynthFSInode::write_bytes(off_t offset, ssize_t size, const byte* buffer, FileDescription*) { LOCKER(m_lock); if (!m_write_callback) diff --git a/Kernel/FileSystem/SyntheticFileSystem.h b/Kernel/FileSystem/SyntheticFileSystem.h index c5bb164363..df989d53f1 100644 --- a/Kernel/FileSystem/SyntheticFileSystem.h +++ b/Kernel/FileSystem/SyntheticFileSystem.h @@ -57,12 +57,12 @@ public: private: // ^Inode - virtual ssize_t read_bytes(off_t, ssize_t, byte* buffer, FileDescriptor*) const override; + virtual ssize_t read_bytes(off_t, ssize_t, byte* buffer, FileDescription*) const override; virtual InodeMetadata metadata() const override; virtual bool traverse_as_directory(Function) const override; virtual InodeIdentifier lookup(StringView name) override; virtual void flush_metadata() override; - virtual ssize_t write_bytes(off_t, ssize_t, const byte* buffer, FileDescriptor*) override; + virtual ssize_t write_bytes(off_t, ssize_t, const byte* buffer, FileDescription*) override; virtual KResult add_child(InodeIdentifier child_id, const String& name, mode_t) override; virtual KResult remove_child(const String& name) override; virtual size_t directory_entry_count() const override; diff --git a/Kernel/FileSystem/VirtualFileSystem.cpp b/Kernel/FileSystem/VirtualFileSystem.cpp index e4ba6cafd4..7ae678e6d1 100644 --- a/Kernel/FileSystem/VirtualFileSystem.cpp +++ b/Kernel/FileSystem/VirtualFileSystem.cpp @@ -1,5 +1,5 @@ #include "VirtualFileSystem.h" -#include +#include #include "FileSystem.h" #include #include @@ -149,7 +149,7 @@ KResult VFS::stat(StringView path, int options, Custody& base, struct stat& stat return custody_or_error.value()->inode().metadata().stat(statbuf); } -KResultOr> VFS::open(StringView path, int options, mode_t mode, Custody& base) +KResultOr> VFS::open(StringView path, int options, mode_t mode, Custody& base) { auto custody_or_error = resolve_path(path, base, nullptr, options); if (options & O_CREAT) { @@ -194,7 +194,7 @@ KResultOr> VFS::open(StringView path, int options, mode } if (should_truncate_file) inode.truncate(0); - return FileDescriptor::create(custody); + return FileDescription::create(custody); } KResult VFS::mknod(StringView path, mode_t mode, dev_t dev, Custody& base) @@ -224,7 +224,7 @@ KResult VFS::mknod(StringView path, mode_t mode, dev_t dev, Custody& base) return KSuccess; } -KResultOr> VFS::create(StringView path, int options, mode_t mode, Custody& base) +KResultOr> VFS::create(StringView path, int options, mode_t mode, Custody& base) { (void)options; @@ -253,7 +253,7 @@ KResultOr> VFS::create(StringView path, int options, mo return KResult(error); auto new_custody = Custody::create(parent_custody, p.basename(), *new_file); - return FileDescriptor::create(*new_custody); + return FileDescription::create(*new_custody); } KResult VFS::mkdir(StringView path, mode_t mode, Custody& base) diff --git a/Kernel/FileSystem/VirtualFileSystem.h b/Kernel/FileSystem/VirtualFileSystem.h index 4edbb3c0bd..a6ff04c2af 100644 --- a/Kernel/FileSystem/VirtualFileSystem.h +++ b/Kernel/FileSystem/VirtualFileSystem.h @@ -28,7 +28,7 @@ class Custody; class Device; -class FileDescriptor; +class FileDescription; class VFS { AK_MAKE_ETERNAL @@ -59,9 +59,9 @@ public: bool mount_root(Retained&&); bool mount(Retained&&, StringView path); - KResultOr> open(RetainPtr&&, int options); - KResultOr> open(StringView path, int options, mode_t mode, Custody& base); - KResultOr> create(StringView path, int options, mode_t mode, Custody& base); + KResultOr> open(RetainPtr&&, int options); + KResultOr> open(StringView path, int options, mode_t mode, Custody& base); + KResultOr> create(StringView path, int options, mode_t mode, Custody& base); KResult mkdir(StringView path, mode_t mode, Custody& base); KResult link(StringView old_path, StringView new_path, Custody& base); KResult unlink(StringView path, Custody& base); @@ -94,7 +94,7 @@ public: KResultOr> resolve_path(StringView path, Custody& base, RetainPtr* parent = nullptr, int options = 0); private: - friend class FileDescriptor; + friend class FileDescription; RetainPtr get_inode(InodeIdentifier); diff --git a/Kernel/KSyms.cpp b/Kernel/KSyms.cpp index 6ee0a3ac23..73816e0d20 100644 --- a/Kernel/KSyms.cpp +++ b/Kernel/KSyms.cpp @@ -1,7 +1,7 @@ #include "KSyms.h" #include "Process.h" #include "Scheduler.h" -#include +#include #include #include diff --git a/Kernel/Makefile b/Kernel/Makefile index 3479d8eed2..8356f9526a 100644 --- a/Kernel/Makefile +++ b/Kernel/Makefile @@ -72,7 +72,7 @@ VFS_OBJS = \ FileSystem/DiskBackedFileSystem.o \ FileSystem/Ext2FileSystem.o \ FileSystem/VirtualFileSystem.o \ - FileSystem/FileDescriptor.o \ + FileSystem/FileDescription.o \ FileSystem/SyntheticFileSystem.o AK_OBJS = \ diff --git a/Kernel/Net/IPv4Socket.cpp b/Kernel/Net/IPv4Socket.cpp index 681674ba61..b09e320409 100644 --- a/Kernel/Net/IPv4Socket.cpp +++ b/Kernel/Net/IPv4Socket.cpp @@ -11,7 +11,7 @@ #include #include #include -#include +#include #define IPV4_SOCKET_DEBUG @@ -89,7 +89,7 @@ KResult IPv4Socket::bind(const sockaddr* address, socklen_t address_size) return protocol_bind(); } -KResult IPv4Socket::connect(FileDescriptor& descriptor, const sockaddr* address, socklen_t address_size, ShouldBlock should_block) +KResult IPv4Socket::connect(FileDescription& descriptor, const sockaddr* address, socklen_t address_size, ShouldBlock should_block) { ASSERT(!m_bound); if (address_size != sizeof(sockaddr_in)) @@ -104,17 +104,17 @@ KResult IPv4Socket::connect(FileDescriptor& descriptor, const sockaddr* address, return protocol_connect(descriptor, should_block); } -void IPv4Socket::attach(FileDescriptor&) +void IPv4Socket::attach(FileDescription&) { ++m_attached_fds; } -void IPv4Socket::detach(FileDescriptor&) +void IPv4Socket::detach(FileDescription&) { --m_attached_fds; } -bool IPv4Socket::can_read(FileDescriptor& descriptor) const +bool IPv4Socket::can_read(FileDescription& descriptor) const { if (descriptor.socket_role() == SocketRole::Listener) return can_accept(); @@ -123,17 +123,17 @@ bool IPv4Socket::can_read(FileDescriptor& descriptor) const return m_can_read; } -ssize_t IPv4Socket::read(FileDescriptor& descriptor, byte* buffer, ssize_t size) +ssize_t IPv4Socket::read(FileDescription& descriptor, byte* buffer, ssize_t size) { return recvfrom(descriptor, buffer, size, 0, nullptr, 0); } -ssize_t IPv4Socket::write(FileDescriptor& descriptor, const byte* data, ssize_t size) +ssize_t IPv4Socket::write(FileDescription& descriptor, const byte* data, ssize_t size) { return sendto(descriptor, data, size, 0, nullptr, 0); } -bool IPv4Socket::can_write(FileDescriptor&) const +bool IPv4Socket::can_write(FileDescription&) const { return is_connected(); } @@ -149,7 +149,7 @@ int IPv4Socket::allocate_local_port_if_needed() return port; } -ssize_t IPv4Socket::sendto(FileDescriptor&, const void* data, size_t data_length, int flags, const sockaddr* addr, socklen_t addr_length) +ssize_t IPv4Socket::sendto(FileDescription&, const void* data, size_t data_length, int flags, const sockaddr* addr, socklen_t addr_length) { (void)flags; if (addr && addr_length != sizeof(sockaddr_in)) @@ -184,7 +184,7 @@ ssize_t IPv4Socket::sendto(FileDescriptor&, const void* data, size_t data_length return protocol_send(data, data_length); } -ssize_t IPv4Socket::recvfrom(FileDescriptor& descriptor, void* buffer, size_t buffer_length, int flags, sockaddr* addr, socklen_t* addr_length) +ssize_t IPv4Socket::recvfrom(FileDescription& descriptor, void* buffer, size_t buffer_length, int flags, sockaddr* addr, socklen_t* addr_length) { (void)flags; if (addr_length && *addr_length < sizeof(sockaddr_in)) diff --git a/Kernel/Net/IPv4Socket.h b/Kernel/Net/IPv4Socket.h index 4f18d63113..dea6b5c171 100644 --- a/Kernel/Net/IPv4Socket.h +++ b/Kernel/Net/IPv4Socket.h @@ -21,17 +21,17 @@ public: static Lockable>& all_sockets(); virtual KResult bind(const sockaddr*, socklen_t) override; - virtual KResult connect(FileDescriptor&, const sockaddr*, socklen_t, ShouldBlock = ShouldBlock::Yes) override; + virtual KResult connect(FileDescription&, const sockaddr*, socklen_t, ShouldBlock = ShouldBlock::Yes) override; virtual bool get_local_address(sockaddr*, socklen_t*) override; virtual bool get_peer_address(sockaddr*, socklen_t*) override; - virtual void attach(FileDescriptor&) override; - virtual void detach(FileDescriptor&) override; - virtual bool can_read(FileDescriptor&) const override; - virtual ssize_t read(FileDescriptor&, byte*, ssize_t) override; - virtual ssize_t write(FileDescriptor&, const byte*, ssize_t) override; - virtual bool can_write(FileDescriptor&) const override; - virtual ssize_t sendto(FileDescriptor&, const void*, size_t, int, const sockaddr*, socklen_t) override; - virtual ssize_t recvfrom(FileDescriptor&, void*, size_t, int flags, sockaddr*, socklen_t*) override; + virtual void attach(FileDescription&) override; + virtual void detach(FileDescription&) override; + virtual bool can_read(FileDescription&) const override; + virtual ssize_t read(FileDescription&, byte*, ssize_t) override; + virtual ssize_t write(FileDescription&, const byte*, ssize_t) override; + virtual bool can_write(FileDescription&) const override; + virtual ssize_t sendto(FileDescription&, const void*, size_t, int, const sockaddr*, socklen_t) override; + virtual ssize_t recvfrom(FileDescription&, void*, size_t, int flags, sockaddr*, socklen_t*) override; void did_receive(const IPv4Address& peer_address, word peer_port, ByteBuffer&&); @@ -52,7 +52,7 @@ protected: virtual KResult protocol_bind() { return KSuccess; } virtual int protocol_receive(const ByteBuffer&, void*, size_t, int, sockaddr*, socklen_t*) { return -ENOTIMPL; } virtual int protocol_send(const void*, int) { return -ENOTIMPL; } - virtual KResult protocol_connect(FileDescriptor&, ShouldBlock) { return KSuccess; } + virtual KResult protocol_connect(FileDescription&, ShouldBlock) { return KSuccess; } virtual int protocol_allocate_local_port() { return 0; } virtual bool protocol_is_disconnected() const { return false; } diff --git a/Kernel/Net/LocalSocket.cpp b/Kernel/Net/LocalSocket.cpp index 99457e2cc4..208348847a 100644 --- a/Kernel/Net/LocalSocket.cpp +++ b/Kernel/Net/LocalSocket.cpp @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include #include @@ -71,7 +71,7 @@ KResult LocalSocket::bind(const sockaddr* address, socklen_t address_size) return KSuccess; } -KResult LocalSocket::connect(FileDescriptor& descriptor, const sockaddr* address, socklen_t address_size, ShouldBlock) +KResult LocalSocket::connect(FileDescription& descriptor, const sockaddr* address, socklen_t address_size, ShouldBlock) { ASSERT(!m_bound); if (address_size != sizeof(sockaddr_un)) @@ -106,7 +106,7 @@ KResult LocalSocket::connect(FileDescriptor& descriptor, const sockaddr* address return current->wait_for_connect(descriptor); } -void LocalSocket::attach(FileDescriptor& descriptor) +void LocalSocket::attach(FileDescription& descriptor) { switch (descriptor.socket_role()) { case SocketRole::Accepted: @@ -123,7 +123,7 @@ void LocalSocket::attach(FileDescriptor& descriptor) } } -void LocalSocket::detach(FileDescriptor& descriptor) +void LocalSocket::detach(FileDescription& descriptor) { switch (descriptor.socket_role()) { case SocketRole::Accepted: @@ -143,7 +143,7 @@ void LocalSocket::detach(FileDescriptor& descriptor) } } -bool LocalSocket::can_read(FileDescriptor& descriptor) const +bool LocalSocket::can_read(FileDescription& descriptor) const { auto role = descriptor.socket_role(); if (role == SocketRole::Listener) @@ -155,7 +155,7 @@ bool LocalSocket::can_read(FileDescriptor& descriptor) const ASSERT_NOT_REACHED(); } -ssize_t LocalSocket::read(FileDescriptor& descriptor, byte* buffer, ssize_t size) +ssize_t LocalSocket::read(FileDescription& descriptor, byte* buffer, ssize_t size) { auto role = descriptor.socket_role(); if (role == SocketRole::Accepted) { @@ -175,7 +175,7 @@ ssize_t LocalSocket::read(FileDescriptor& descriptor, byte* buffer, ssize_t size ASSERT_NOT_REACHED(); } -bool LocalSocket::has_attached_peer(const FileDescriptor& descriptor) const +bool LocalSocket::has_attached_peer(const FileDescription& descriptor) const { if (descriptor.socket_role() == SocketRole::Accepted) return m_connected_fds_open || m_connecting_fds_open; @@ -184,7 +184,7 @@ bool LocalSocket::has_attached_peer(const FileDescriptor& descriptor) const ASSERT_NOT_REACHED(); } -ssize_t LocalSocket::write(FileDescriptor& descriptor, const byte* data, ssize_t size) +ssize_t LocalSocket::write(FileDescription& descriptor, const byte* data, ssize_t size) { if (!has_attached_peer(descriptor)) return -EPIPE; @@ -195,7 +195,7 @@ ssize_t LocalSocket::write(FileDescriptor& descriptor, const byte* data, ssize_t ASSERT_NOT_REACHED(); } -bool LocalSocket::can_write(FileDescriptor& descriptor) const +bool LocalSocket::can_write(FileDescription& descriptor) const { if (descriptor.socket_role() == SocketRole::Accepted) return !has_attached_peer(descriptor) || m_for_client.bytes_in_write_buffer() < 16384; @@ -204,12 +204,12 @@ bool LocalSocket::can_write(FileDescriptor& descriptor) const ASSERT_NOT_REACHED(); } -ssize_t LocalSocket::sendto(FileDescriptor& descriptor, const void* data, size_t data_size, int, const sockaddr*, socklen_t) +ssize_t LocalSocket::sendto(FileDescription& descriptor, const void* data, size_t data_size, int, const sockaddr*, socklen_t) { return write(descriptor, (const byte*)data, data_size); } -ssize_t LocalSocket::recvfrom(FileDescriptor& descriptor, void* buffer, size_t buffer_size, int, sockaddr*, socklen_t*) +ssize_t LocalSocket::recvfrom(FileDescription& descriptor, void* buffer, size_t buffer_size, int, sockaddr*, socklen_t*) { return read(descriptor, (byte*)buffer, buffer_size); } diff --git a/Kernel/Net/LocalSocket.h b/Kernel/Net/LocalSocket.h index 3328fd4eba..f1ac23719b 100644 --- a/Kernel/Net/LocalSocket.h +++ b/Kernel/Net/LocalSocket.h @@ -3,7 +3,7 @@ #include #include -class FileDescriptor; +class FileDescription; class LocalSocket final : public Socket { public: @@ -11,24 +11,24 @@ public: virtual ~LocalSocket() override; virtual KResult bind(const sockaddr*, socklen_t) override; - virtual KResult connect(FileDescriptor&, const sockaddr*, socklen_t, ShouldBlock = ShouldBlock::Yes) override; + virtual KResult connect(FileDescription&, const sockaddr*, socklen_t, ShouldBlock = ShouldBlock::Yes) override; virtual bool get_local_address(sockaddr*, socklen_t*) override; virtual bool get_peer_address(sockaddr*, socklen_t*) override; - virtual void attach(FileDescriptor&) override; - virtual void detach(FileDescriptor&) override; - virtual bool can_read(FileDescriptor&) const override; - virtual ssize_t read(FileDescriptor&, byte*, ssize_t) override; - virtual ssize_t write(FileDescriptor&, const byte*, ssize_t) override; - virtual bool can_write(FileDescriptor&) const override; - virtual ssize_t sendto(FileDescriptor&, const void*, size_t, int, const sockaddr*, socklen_t) override; - virtual ssize_t recvfrom(FileDescriptor&, void*, size_t, int flags, sockaddr*, socklen_t*) override; + virtual void attach(FileDescription&) override; + virtual void detach(FileDescription&) override; + virtual bool can_read(FileDescription&) const override; + virtual ssize_t read(FileDescription&, byte*, ssize_t) override; + virtual ssize_t write(FileDescription&, const byte*, ssize_t) override; + virtual bool can_write(FileDescription&) const override; + virtual ssize_t sendto(FileDescription&, const void*, size_t, int, const sockaddr*, socklen_t) override; + virtual ssize_t recvfrom(FileDescription&, void*, size_t, int flags, sockaddr*, socklen_t*) override; private: explicit LocalSocket(int type); virtual bool is_local() const override { return true; } - bool has_attached_peer(const FileDescriptor&) const; + bool has_attached_peer(const FileDescription&) const; - RetainPtr m_file; + RetainPtr m_file; bool m_bound { false }; int m_accepted_fds_open { 0 }; diff --git a/Kernel/Net/Socket.cpp b/Kernel/Net/Socket.cpp index 8c800f8eba..ee4a78c473 100644 --- a/Kernel/Net/Socket.cpp +++ b/Kernel/Net/Socket.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include #include @@ -142,7 +142,7 @@ static const char* to_string(SocketRole role) } } -String Socket::absolute_path(const FileDescriptor& descriptor) const +String Socket::absolute_path(const FileDescription& descriptor) const { return String::format("socket:%x (role: %s)", this, to_string(descriptor.socket_role())); } diff --git a/Kernel/Net/Socket.h b/Kernel/Net/Socket.h index f11f3e768b..336dc8623b 100644 --- a/Kernel/Net/Socket.h +++ b/Kernel/Net/Socket.h @@ -23,7 +23,7 @@ enum class ShouldBlock Yes = 1 }; -class FileDescriptor; +class FileDescription; class Socket : public File { public: @@ -40,15 +40,15 @@ public: KResult listen(int backlog); virtual KResult bind(const sockaddr*, socklen_t) = 0; - virtual KResult connect(FileDescriptor&, const sockaddr*, socklen_t, ShouldBlock) = 0; + virtual KResult connect(FileDescription&, const sockaddr*, socklen_t, ShouldBlock) = 0; virtual bool get_local_address(sockaddr*, socklen_t*) = 0; virtual bool get_peer_address(sockaddr*, socklen_t*) = 0; virtual bool is_local() const { return false; } virtual bool is_ipv4() const { return false; } - virtual void attach(FileDescriptor&) = 0; - virtual void detach(FileDescriptor&) = 0; - virtual ssize_t sendto(FileDescriptor&, const void*, size_t, int flags, const sockaddr*, socklen_t) = 0; - virtual ssize_t recvfrom(FileDescriptor&, void*, size_t, int flags, sockaddr*, socklen_t*) = 0; + virtual void attach(FileDescription&) = 0; + virtual void detach(FileDescription&) = 0; + virtual ssize_t sendto(FileDescription&, const void*, size_t, int flags, const sockaddr*, socklen_t) = 0; + virtual ssize_t recvfrom(FileDescription&, void*, size_t, int flags, sockaddr*, socklen_t*) = 0; KResult setsockopt(int level, int option, const void*, socklen_t); KResult getsockopt(int level, int option, void*, socklen_t*); @@ -62,7 +62,7 @@ public: Lock& lock() { return m_lock; } - virtual String absolute_path(const FileDescriptor&) const override; + virtual String absolute_path(const FileDescription&) const override; protected: Socket(int domain, int type, int protocol); diff --git a/Kernel/Net/TCPSocket.cpp b/Kernel/Net/TCPSocket.cpp index acb3c47569..fe60425fd3 100644 --- a/Kernel/Net/TCPSocket.cpp +++ b/Kernel/Net/TCPSocket.cpp @@ -148,7 +148,7 @@ NetworkOrdered TCPSocket::compute_tcp_checksum(const IPv4Address& source, return ~(checksum & 0xffff); } -KResult TCPSocket::protocol_connect(FileDescriptor& descriptor, ShouldBlock should_block) +KResult TCPSocket::protocol_connect(FileDescription& descriptor, ShouldBlock should_block) { auto* adapter = adapter_for_route_to(peer_address()); if (!adapter) diff --git a/Kernel/Net/TCPSocket.h b/Kernel/Net/TCPSocket.h index 35856d7ae8..7ced06f56f 100644 --- a/Kernel/Net/TCPSocket.h +++ b/Kernel/Net/TCPSocket.h @@ -36,7 +36,7 @@ private: virtual int protocol_receive(const ByteBuffer&, void* buffer, size_t buffer_size, int flags, sockaddr* addr, socklen_t* addr_length) override; virtual int protocol_send(const void*, int) override; - virtual KResult protocol_connect(FileDescriptor&, ShouldBlock) override; + virtual KResult protocol_connect(FileDescription&, ShouldBlock) override; virtual int protocol_allocate_local_port() override; virtual bool protocol_is_disconnected() const override; virtual KResult protocol_bind() override; diff --git a/Kernel/Net/UDPSocket.h b/Kernel/Net/UDPSocket.h index a76eaa7fe7..80ef09b7bf 100644 --- a/Kernel/Net/UDPSocket.h +++ b/Kernel/Net/UDPSocket.h @@ -18,7 +18,7 @@ private: virtual int protocol_receive(const ByteBuffer&, void* buffer, size_t buffer_size, int flags, sockaddr* addr, socklen_t* addr_length) override; virtual int protocol_send(const void*, int) override; - virtual KResult protocol_connect(FileDescriptor&, ShouldBlock) override { return KSuccess; } + virtual KResult protocol_connect(FileDescription&, ShouldBlock) override { return KSuccess; } virtual int protocol_allocate_local_port() override; virtual KResult protocol_bind() override; }; diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index a4a9e03205..2e219f7612 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -3,7 +3,7 @@ #include "kmalloc.h" #include "StdLib.h" #include "i386.h" -#include +#include #include #include #include @@ -190,7 +190,7 @@ void* Process::sys$mmap(const Syscall::SC_mmap_params* params) } if (offset & ~PAGE_MASK) return (void*)-EINVAL; - auto* descriptor = file_descriptor(fd); + auto* descriptor = file_description(fd); if (!descriptor) return (void*)-EBADF; auto region_or_error = descriptor->mmap(*this, LinearAddress((dword)addr), offset, size, prot); @@ -765,7 +765,7 @@ Process* Process::from_pid(pid_t pid) return nullptr; } -FileDescriptor* Process::file_descriptor(int fd) +FileDescription* Process::file_description(int fd) { if (fd < 0) return nullptr; @@ -774,7 +774,7 @@ FileDescriptor* Process::file_descriptor(int fd) return nullptr; } -const FileDescriptor* Process::file_descriptor(int fd) const +const FileDescription* Process::file_description(int fd) const { if (fd < 0) return nullptr; @@ -789,7 +789,7 @@ ssize_t Process::sys$get_dir_entries(int fd, void* buffer, ssize_t size) return -EINVAL; if (!validate_write(buffer, size)) return -EFAULT; - auto* descriptor = file_descriptor(fd); + auto* descriptor = file_description(fd); if (!descriptor) return -EBADF; return descriptor->get_dir_entries((byte*)buffer, size); @@ -797,7 +797,7 @@ ssize_t Process::sys$get_dir_entries(int fd, void* buffer, ssize_t size) int Process::sys$lseek(int fd, off_t offset, int whence) { - auto* descriptor = file_descriptor(fd); + auto* descriptor = file_description(fd); if (!descriptor) return -EBADF; return descriptor->seek(offset, whence); @@ -809,7 +809,7 @@ int Process::sys$ttyname_r(int fd, char* buffer, ssize_t size) return -EINVAL; if (!validate_write(buffer, size)) return -EFAULT; - auto* descriptor = file_descriptor(fd); + auto* descriptor = file_description(fd); if (!descriptor) return -EBADF; if (!descriptor->is_tty()) @@ -827,7 +827,7 @@ int Process::sys$ptsname_r(int fd, char* buffer, ssize_t size) return -EINVAL; if (!validate_write(buffer, size)) return -EFAULT; - auto* descriptor = file_descriptor(fd); + auto* descriptor = file_description(fd); if (!descriptor) return -EBADF; auto* master_pty = descriptor->master_pty(); @@ -850,7 +850,7 @@ ssize_t Process::sys$writev(int fd, const struct iovec* iov, int iov_count) // FIXME: Return EINVAL if sum of iovecs is greater than INT_MAX - auto* descriptor = file_descriptor(fd); + auto* descriptor = file_description(fd); if (!descriptor) return -EBADF; @@ -874,7 +874,7 @@ ssize_t Process::sys$writev(int fd, const struct iovec* iov, int iov_count) return nwritten; } -ssize_t Process::do_write(FileDescriptor& descriptor, const byte* data, int data_size) +ssize_t Process::do_write(FileDescription& descriptor, const byte* data, int data_size) { ssize_t nwritten = 0; if (!descriptor.is_blocking()) { @@ -931,7 +931,7 @@ ssize_t Process::sys$write(int fd, const byte* data, ssize_t size) #ifdef DEBUG_IO dbgprintf("%s(%u): sys$write(%d, %p, %u)\n", name().characters(), pid(), fd, data, size); #endif - auto* descriptor = file_descriptor(fd); + auto* descriptor = file_description(fd); if (!descriptor) return -EBADF; auto nwritten = do_write(*descriptor, data, size); @@ -954,7 +954,7 @@ ssize_t Process::sys$read(int fd, byte* buffer, ssize_t size) #ifdef DEBUG_IO dbgprintf("%s(%u) sys$read(%d, %p, %u)\n", name().characters(), pid(), fd, buffer, size); #endif - auto* descriptor = file_descriptor(fd); + auto* descriptor = file_description(fd); if (!descriptor) return -EBADF; if (descriptor->is_blocking()) { @@ -969,7 +969,7 @@ ssize_t Process::sys$read(int fd, byte* buffer, ssize_t size) int Process::sys$close(int fd) { - auto* descriptor = file_descriptor(fd); + auto* descriptor = file_description(fd); if (!descriptor) return -EBADF; int rc = descriptor->close(); @@ -1009,10 +1009,10 @@ int Process::sys$fcntl(int fd, int cmd, dword arg) (void) cmd; (void) arg; dbgprintf("sys$fcntl: fd=%d, cmd=%d, arg=%u\n", fd, cmd, arg); - auto* descriptor = file_descriptor(fd); + auto* descriptor = file_description(fd); if (!descriptor) return -EBADF; - // NOTE: The FD flags are not shared between FileDescriptor objects. + // NOTE: The FD flags are not shared between FileDescription objects. // This means that dup() doesn't copy the FD_CLOEXEC flag! switch (cmd) { case F_DUPFD: { @@ -1045,7 +1045,7 @@ int Process::sys$fstat(int fd, stat* statbuf) { if (!validate_write_typed(statbuf)) return -EFAULT; - auto* descriptor = file_descriptor(fd); + auto* descriptor = file_description(fd); if (!descriptor) return -EBADF; return descriptor->fstat(*statbuf); @@ -1226,7 +1226,7 @@ int Process::sys$uname(utsname* buf) int Process::sys$isatty(int fd) { - auto* descriptor = file_descriptor(fd); + auto* descriptor = file_description(fd); if (!descriptor) return -EBADF; if (!descriptor->is_tty()) @@ -1607,7 +1607,7 @@ int Process::sys$setpgid(pid_t specified_pid, pid_t specified_pgid) int Process::sys$ioctl(int fd, unsigned request, unsigned arg) { - auto* descriptor = file_descriptor(fd); + auto* descriptor = file_description(fd); if (!descriptor) return -EBADF; return descriptor->file().ioctl(*descriptor, request, arg); @@ -1620,7 +1620,7 @@ int Process::sys$getdtablesize() int Process::sys$dup(int old_fd) { - auto* descriptor = file_descriptor(old_fd); + auto* descriptor = file_description(old_fd); if (!descriptor) return -EBADF; int new_fd = alloc_fd(0); @@ -1632,7 +1632,7 @@ int Process::sys$dup(int old_fd) int Process::sys$dup2(int old_fd, int new_fd) { - auto* descriptor = file_descriptor(old_fd); + auto* descriptor = file_description(old_fd); if (!descriptor) return -EBADF; if (new_fd < 0 || new_fd >= m_max_open_file_descriptors) @@ -1779,7 +1779,7 @@ int Process::sys$select(const Syscall::SC_select_params* params) return 0; for (int fd = 0; fd < params->nfds; ++fd) { if (FD_ISSET(fd, fds)) { - if (!file_descriptor(fd)) + if (!file_description(fd)) return -EBADF; vector.append(fd); } @@ -1806,7 +1806,7 @@ int Process::sys$select(const Syscall::SC_select_params* params) return; FD_ZERO(fds); for (int fd : vector) { - if (auto* descriptor = file_descriptor(fd); descriptor && should_mark(*descriptor)) { + if (auto* descriptor = file_description(fd); descriptor && should_mark(*descriptor)) { FD_SET(fd, fds); ++marked_fd_count; } @@ -1858,7 +1858,7 @@ int Process::sys$poll(pollfd* fds, int nfds, int timeout) int fds_with_revents = 0; for (int i = 0; i < nfds; ++i) { - auto* descriptor = file_descriptor(fds[i].fd); + auto* descriptor = file_description(fds[i].fd); if (!descriptor) { fds[i].revents = POLLNVAL; continue; @@ -1934,7 +1934,7 @@ int Process::sys$chmod(const char* pathname, mode_t mode) int Process::sys$fchmod(int fd, mode_t mode) { - auto* descriptor = file_descriptor(fd); + auto* descriptor = file_description(fd); if (!descriptor) return -EBADF; return descriptor->fchmod(mode); @@ -1942,7 +1942,7 @@ int Process::sys$fchmod(int fd, mode_t mode) int Process::sys$fchown(int fd, uid_t uid, gid_t gid) { - auto* descriptor = file_descriptor(fd); + auto* descriptor = file_description(fd); if (!descriptor) return -EBADF; return descriptor->chown(uid, gid); @@ -2041,7 +2041,7 @@ int Process::sys$socket(int domain, int type, int protocol) auto result = Socket::create(domain, type, protocol); if (result.is_error()) return result.error(); - auto descriptor = FileDescriptor::create(*result.value()); + auto descriptor = FileDescription::create(*result.value()); unsigned flags = 0; if (type & SOCK_CLOEXEC) flags |= FD_CLOEXEC; @@ -2055,7 +2055,7 @@ int Process::sys$bind(int sockfd, const sockaddr* address, socklen_t address_len { if (!validate_read(address, address_length)) return -EFAULT; - auto* descriptor = file_descriptor(sockfd); + auto* descriptor = file_description(sockfd); if (!descriptor) return -EBADF; if (!descriptor->is_socket()) @@ -2066,7 +2066,7 @@ int Process::sys$bind(int sockfd, const sockaddr* address, socklen_t address_len int Process::sys$listen(int sockfd, int backlog) { - auto* descriptor = file_descriptor(sockfd); + auto* descriptor = file_description(sockfd); if (!descriptor) return -EBADF; if (!descriptor->is_socket()) @@ -2088,7 +2088,7 @@ int Process::sys$accept(int accepting_socket_fd, sockaddr* address, socklen_t* a int accepted_socket_fd = alloc_fd(); if (accepted_socket_fd < 0) return accepted_socket_fd; - auto* accepting_socket_descriptor = file_descriptor(accepting_socket_fd); + auto* accepting_socket_descriptor = file_description(accepting_socket_fd); if (!accepting_socket_descriptor) return -EBADF; if (!accepting_socket_descriptor->is_socket()) @@ -2102,7 +2102,7 @@ int Process::sys$accept(int accepting_socket_fd, sockaddr* address, socklen_t* a ASSERT(accepted_socket); bool success = accepted_socket->get_local_address(address, address_size); ASSERT(success); - auto accepted_socket_descriptor = FileDescriptor::create(move(accepted_socket), SocketRole::Accepted); + auto accepted_socket_descriptor = FileDescription::create(move(accepted_socket), SocketRole::Accepted); // NOTE: The accepted socket inherits fd flags from the accepting socket. // I'm not sure if this matches other systems but it makes sense to me. accepted_socket_descriptor->set_blocking(accepting_socket_descriptor->is_blocking()); @@ -2117,7 +2117,7 @@ int Process::sys$connect(int sockfd, const sockaddr* address, socklen_t address_ int fd = alloc_fd(); if (fd < 0) return fd; - auto* descriptor = file_descriptor(sockfd); + auto* descriptor = file_description(sockfd); if (!descriptor) return -EBADF; if (!descriptor->is_socket()) @@ -2151,7 +2151,7 @@ ssize_t Process::sys$sendto(const Syscall::SC_sendto_params* params) return -EFAULT; if (addr && !validate_read(addr, addr_length)) return -EFAULT; - auto* descriptor = file_descriptor(sockfd); + auto* descriptor = file_description(sockfd); if (!descriptor) return -EBADF; if (!descriptor->is_socket()) @@ -2183,7 +2183,7 @@ ssize_t Process::sys$recvfrom(const Syscall::SC_recvfrom_params* params) } else if (addr) { return -EINVAL; } - auto* descriptor = file_descriptor(sockfd); + auto* descriptor = file_description(sockfd); if (!descriptor) return -EBADF; if (!descriptor->is_socket()) @@ -2212,7 +2212,7 @@ int Process::sys$getsockname(int sockfd, sockaddr* addr, socklen_t* addrlen) if (!validate_write(addr, *addrlen)) return -EFAULT; - auto* descriptor = file_descriptor(sockfd); + auto* descriptor = file_description(sockfd); if (!descriptor) return -EBADF; @@ -2237,7 +2237,7 @@ int Process::sys$getpeername(int sockfd, sockaddr* addr, socklen_t* addrlen) if (!validate_write(addr, *addrlen)) return -EFAULT; - auto* descriptor = file_descriptor(sockfd); + auto* descriptor = file_description(sockfd); if (!descriptor) return -EBADF; @@ -2312,7 +2312,7 @@ int Process::sys$getsockopt(const Syscall::SC_getsockopt_params* params) return -EFAULT; if (!validate_write(value, *value_size)) return -EFAULT; - auto* descriptor = file_descriptor(sockfd); + auto* descriptor = file_description(sockfd); if (!descriptor) return -EBADF; if (!descriptor->is_socket()) @@ -2333,7 +2333,7 @@ int Process::sys$setsockopt(const Syscall::SC_setsockopt_params* params) if (!validate_read(value, value_size)) return -EFAULT; - auto* descriptor = file_descriptor(sockfd); + auto* descriptor = file_description(sockfd); if (!descriptor) return -EBADF; if (!descriptor->is_socket()) @@ -2672,7 +2672,7 @@ int Process::sys$shm_open(const char* name, int flags, mode_t mode) auto shm_or_error = SharedMemory::open(String(name), flags, mode); if (shm_or_error.is_error()) return shm_or_error.error(); - auto descriptor = FileDescriptor::create(shm_or_error.value().ptr()); + auto descriptor = FileDescription::create(shm_or_error.value().ptr()); m_fds[fd].set(move(descriptor), FD_CLOEXEC); return fd; } @@ -2686,7 +2686,7 @@ int Process::sys$shm_unlink(const char* name) int Process::sys$ftruncate(int fd, off_t length) { - auto* descriptor = file_descriptor(fd); + auto* descriptor = file_description(fd); if (!descriptor) return -EBADF; // FIXME: Check that fd is writable, otherwise EINVAL. @@ -2704,7 +2704,7 @@ int Process::sys$systrace(pid_t pid) int fd = alloc_fd(); if (fd < 0) return fd; - auto descriptor = FileDescriptor::create(peer->ensure_tracer()); + auto descriptor = FileDescription::create(peer->ensure_tracer()); m_fds[fd].set(move(descriptor), 0); return fd; } @@ -2716,13 +2716,13 @@ ProcessTracer& Process::ensure_tracer() return *m_tracer; } -void Process::FileDescriptorAndFlags::clear() +void Process::FileDescriptionAndFlags::clear() { descriptor = nullptr; flags = 0; } -void Process::FileDescriptorAndFlags::set(Retained&& d, dword f) +void Process::FileDescriptionAndFlags::set(Retained&& d, dword f) { descriptor = move(d); flags = f; diff --git a/Kernel/Process.h b/Kernel/Process.h index b5cadaec0c..a792e5a2a2 100644 --- a/Kernel/Process.h +++ b/Kernel/Process.h @@ -16,7 +16,7 @@ #include class ELFLoader; -class FileDescriptor; +class FileDescription; class PageDirectory; class Region; class VMObject; @@ -87,8 +87,8 @@ public: bool in_group(gid_t) const; - FileDescriptor* file_descriptor(int fd); - const FileDescriptor* file_descriptor(int fd) const; + FileDescription* file_description(int fd); + const FileDescription* file_description(int fd) const; template static void for_each(Callback); @@ -280,7 +280,7 @@ private: Range allocate_range(LinearAddress, size_t); int do_exec(String path, Vector arguments, Vector environment); - ssize_t do_write(FileDescriptor&, const byte*, int data_size); + ssize_t do_write(FileDescription&, const byte*, int data_size); int alloc_fd(int first_candidate_fd = 0); void disown_all_shared_buffers(); @@ -306,17 +306,17 @@ private: Priority m_priority { NormalPriority }; - struct FileDescriptorAndFlags { + struct FileDescriptionAndFlags { operator bool() const { return !!descriptor; } void clear(); - void set(Retained&& d, dword f = 0); - RetainPtr descriptor; + void set(Retained&& d, dword f = 0); + RetainPtr descriptor; dword flags { 0 }; }; - Vector m_fds; + Vector m_fds; RingLevel m_ring { Ring0 }; - int m_max_open_file_descriptors { 128 }; + static const int m_max_open_file_descriptors { FD_SETSIZE }; byte m_termination_status { 0 }; byte m_termination_signal { 0 }; diff --git a/Kernel/ProcessTracer.cpp b/Kernel/ProcessTracer.cpp index e81568b4a0..66aeb8ac49 100644 --- a/Kernel/ProcessTracer.cpp +++ b/Kernel/ProcessTracer.cpp @@ -18,7 +18,7 @@ void ProcessTracer::did_syscall(dword function, dword arg1, dword arg2, dword ar m_calls.enqueue(data); } -int ProcessTracer::read(FileDescriptor&, byte* buffer, int buffer_size) +int ProcessTracer::read(FileDescription&, byte* buffer, int buffer_size) { if (m_calls.is_empty()) return 0; @@ -29,7 +29,7 @@ int ProcessTracer::read(FileDescriptor&, byte* buffer, int buffer_size) return sizeof(data); } -String ProcessTracer::absolute_path(const FileDescriptor&) const +String ProcessTracer::absolute_path(const FileDescription&) const { return String::format("tracer:%d", m_pid); } diff --git a/Kernel/ProcessTracer.h b/Kernel/ProcessTracer.h index 3f23e4e31d..0b71b0ba0a 100644 --- a/Kernel/ProcessTracer.h +++ b/Kernel/ProcessTracer.h @@ -12,13 +12,13 @@ public: bool is_dead() const { return m_dead; } void set_dead() { m_dead = true; } - virtual bool can_read(FileDescriptor&) const override { return !m_calls.is_empty() || m_dead; } - virtual int read(FileDescriptor&, byte*, int) override; + virtual bool can_read(FileDescription&) const override { return !m_calls.is_empty() || m_dead; } + virtual int read(FileDescription&, byte*, int) override; - virtual bool can_write(FileDescriptor&) const override { return true; } - virtual int write(FileDescriptor&, const byte*, int) override { return -EIO; } + virtual bool can_write(FileDescription&) const override { return true; } + virtual int write(FileDescription&, const byte*, int) override { return -EIO; } - virtual String absolute_path(const FileDescriptor&) const override; + virtual String absolute_path(const FileDescription&) const override; void did_syscall(dword function, dword arg1, dword arg2, dword arg3, dword result); pid_t pid() const { return m_pid; } diff --git a/Kernel/Scheduler.cpp b/Kernel/Scheduler.cpp index 98c357e6b1..5063f157e7 100644 --- a/Kernel/Scheduler.cpp +++ b/Kernel/Scheduler.cpp @@ -4,7 +4,7 @@ #include "i8253.h" #include #include -#include +#include #include //#define LOG_EVERY_CONTEXT_SWITCH diff --git a/Kernel/SharedMemory.cpp b/Kernel/SharedMemory.cpp index 830c8ffee9..5f4e54c4dd 100644 --- a/Kernel/SharedMemory.cpp +++ b/Kernel/SharedMemory.cpp @@ -68,12 +68,12 @@ KResult SharedMemory::truncate(int length) return KResult(-ENOTIMPL); } -String SharedMemory::absolute_path(const FileDescriptor&) const +String SharedMemory::absolute_path(const FileDescription&) const { return String::format("shm:%u", this); } -int SharedMemory::read(FileDescriptor&, byte* buffer, int buffer_size) +int SharedMemory::read(FileDescription&, byte* buffer, int buffer_size) { UNUSED_PARAM(buffer); UNUSED_PARAM(buffer_size); @@ -81,7 +81,7 @@ int SharedMemory::read(FileDescriptor&, byte* buffer, int buffer_size) ASSERT_NOT_REACHED(); } -int SharedMemory::write(FileDescriptor&, const byte* data, int data_size) +int SharedMemory::write(FileDescription&, const byte* data, int data_size) { UNUSED_PARAM(data); UNUSED_PARAM(data_size); @@ -89,7 +89,7 @@ int SharedMemory::write(FileDescriptor&, const byte* data, int data_size) ASSERT_NOT_REACHED(); } -KResultOr SharedMemory::mmap(Process& process, FileDescriptor&, LinearAddress laddr, size_t offset, size_t size, int prot) +KResultOr SharedMemory::mmap(Process& process, FileDescription&, LinearAddress laddr, size_t offset, size_t size, int prot) { if (!vmo()) return KResult(-ENODEV); diff --git a/Kernel/SharedMemory.h b/Kernel/SharedMemory.h index b0de2e5009..c0ec93a132 100644 --- a/Kernel/SharedMemory.h +++ b/Kernel/SharedMemory.h @@ -24,14 +24,14 @@ public: private: // ^File - virtual bool can_read(FileDescriptor&) const override { return true; } - virtual bool can_write(FileDescriptor&) const override { return true; } - virtual int read(FileDescriptor&, byte*, int) override; - virtual int write(FileDescriptor&, const byte*, int) override; - virtual String absolute_path(const FileDescriptor&) const override; + virtual bool can_read(FileDescription&) const override { return true; } + virtual bool can_write(FileDescription&) const override { return true; } + virtual int read(FileDescription&, byte*, int) override; + virtual int write(FileDescription&, const byte*, int) override; + virtual String absolute_path(const FileDescription&) const override; virtual const char* class_name() const override { return "SharedMemory"; } virtual bool is_shared_memory() const override { return true; } - virtual KResultOr mmap(Process&, FileDescriptor&, LinearAddress, size_t offset, size_t size, int prot) override; + virtual KResultOr mmap(Process&, FileDescription&, LinearAddress, size_t offset, size_t size, int prot) override; SharedMemory(const String& name, uid_t, gid_t, mode_t); diff --git a/Kernel/TTY/MasterPTY.cpp b/Kernel/TTY/MasterPTY.cpp index 22e87495b0..c3eb39b0b1 100644 --- a/Kernel/TTY/MasterPTY.cpp +++ b/Kernel/TTY/MasterPTY.cpp @@ -31,14 +31,14 @@ String MasterPTY::pts_name() const return m_pts_name; } -ssize_t MasterPTY::read(FileDescriptor&, byte* buffer, ssize_t size) +ssize_t MasterPTY::read(FileDescription&, byte* buffer, ssize_t size) { if (!m_slave && m_buffer.is_empty()) return 0; return m_buffer.read(buffer, size); } -ssize_t MasterPTY::write(FileDescriptor&, const byte* buffer, ssize_t size) +ssize_t MasterPTY::write(FileDescription&, const byte* buffer, ssize_t size) { if (!m_slave) return -EIO; @@ -46,14 +46,14 @@ ssize_t MasterPTY::write(FileDescriptor&, const byte* buffer, ssize_t size) return size; } -bool MasterPTY::can_read(FileDescriptor&) const +bool MasterPTY::can_read(FileDescription&) const { if (!m_slave) return true; return !m_buffer.is_empty(); } -bool MasterPTY::can_write(FileDescriptor&) const +bool MasterPTY::can_write(FileDescription&) const { return true; } @@ -64,7 +64,7 @@ void MasterPTY::notify_slave_closed(Badge) dbgprintf("MasterPTY(%u): slave closed, my retains: %u, slave retains: %u\n", m_index, retain_count(), m_slave->retain_count()); #endif // +1 retain for my MasterPTY::m_slave - // +1 retain for FileDescriptor::m_device + // +1 retain for FileDescription::m_device if (m_slave->retain_count() == 2) m_slave = nullptr; } @@ -88,7 +88,7 @@ void MasterPTY::close() { if (retain_count() == 2) { InterruptDisabler disabler; - // After the closing FileDescriptor dies, slave is the only thing keeping me alive. + // After the closing FileDescription dies, slave is the only thing keeping me alive. // From this point, let's consider ourselves closed. m_closed = true; @@ -96,7 +96,7 @@ void MasterPTY::close() } } -int MasterPTY::ioctl(FileDescriptor& descriptor, unsigned request, unsigned arg) +int MasterPTY::ioctl(FileDescription& descriptor, unsigned request, unsigned arg) { if (request == TIOCSWINSZ) return m_slave->ioctl(descriptor, request, arg); diff --git a/Kernel/TTY/MasterPTY.h b/Kernel/TTY/MasterPTY.h index 22fd3db48e..accb6902bc 100644 --- a/Kernel/TTY/MasterPTY.h +++ b/Kernel/TTY/MasterPTY.h @@ -20,13 +20,13 @@ public: private: // ^CharacterDevice - virtual ssize_t read(FileDescriptor&, byte*, ssize_t) override; - virtual ssize_t write(FileDescriptor&, const byte*, ssize_t) override; - virtual bool can_read(FileDescriptor&) const override; - virtual bool can_write(FileDescriptor&) const override; + virtual ssize_t read(FileDescription&, byte*, ssize_t) override; + virtual ssize_t write(FileDescription&, const byte*, ssize_t) override; + virtual bool can_read(FileDescription&) const override; + virtual bool can_write(FileDescription&) const override; virtual void close() override; virtual bool is_master_pty() const override { return true; } - virtual int ioctl(FileDescriptor&, unsigned request, unsigned arg) override; + virtual int ioctl(FileDescription&, unsigned request, unsigned arg) override; virtual const char* class_name() const override { return "MasterPTY"; } RetainPtr m_slave; diff --git a/Kernel/TTY/PTYMultiplexer.cpp b/Kernel/TTY/PTYMultiplexer.cpp index 1620f8f952..3b8b596502 100644 --- a/Kernel/TTY/PTYMultiplexer.cpp +++ b/Kernel/TTY/PTYMultiplexer.cpp @@ -1,6 +1,6 @@ #include "PTYMultiplexer.h" #include "MasterPTY.h" -#include +#include #include #include @@ -28,7 +28,7 @@ PTYMultiplexer::~PTYMultiplexer() { } -KResultOr> PTYMultiplexer::open(int options) +KResultOr> PTYMultiplexer::open(int options) { UNUSED_PARAM(options); LOCKER(m_lock); @@ -39,7 +39,7 @@ KResultOr> PTYMultiplexer::open(int options) #ifdef PTMX_DEBUG dbgprintf("PTYMultiplexer::open: Vending master %u\n", master->index()); #endif - return FileDescriptor::create(master.ptr()); + return FileDescription::create(master.ptr()); } void PTYMultiplexer::notify_master_destroyed(Badge, unsigned index) diff --git a/Kernel/TTY/PTYMultiplexer.h b/Kernel/TTY/PTYMultiplexer.h index 1d06d6f4d8..b25a5674fc 100644 --- a/Kernel/TTY/PTYMultiplexer.h +++ b/Kernel/TTY/PTYMultiplexer.h @@ -15,11 +15,11 @@ public: static PTYMultiplexer& the(); // ^CharacterDevice - virtual KResultOr> open(int options) override; - virtual ssize_t read(FileDescriptor&, byte*, ssize_t) override { return 0; } - virtual ssize_t write(FileDescriptor&, const byte*, ssize_t) override { return 0; } - virtual bool can_read(FileDescriptor&) const override { return true; } - virtual bool can_write(FileDescriptor&) const override { return true; } + virtual KResultOr> open(int options) override; + virtual ssize_t read(FileDescription&, byte*, ssize_t) override { return 0; } + virtual ssize_t write(FileDescription&, const byte*, ssize_t) override { return 0; } + virtual bool can_read(FileDescription&) const override { return true; } + virtual bool can_write(FileDescription&) const override { return true; } void notify_master_destroyed(Badge, unsigned index); diff --git a/Kernel/TTY/SlavePTY.cpp b/Kernel/TTY/SlavePTY.cpp index f40392037c..102a7ee48a 100644 --- a/Kernel/TTY/SlavePTY.cpp +++ b/Kernel/TTY/SlavePTY.cpp @@ -41,19 +41,19 @@ ssize_t SlavePTY::on_tty_write(const byte* data, ssize_t size) return m_master->on_slave_write(data, size); } -bool SlavePTY::can_write(FileDescriptor&) const +bool SlavePTY::can_write(FileDescription&) const { return m_master->can_write_from_slave(); } -bool SlavePTY::can_read(FileDescriptor& descriptor) const +bool SlavePTY::can_read(FileDescription& descriptor) const { if (m_master->is_closed()) return true; return TTY::can_read(descriptor); } -ssize_t SlavePTY::read(FileDescriptor& descriptor, byte* buffer, ssize_t size) +ssize_t SlavePTY::read(FileDescription& descriptor, byte* buffer, ssize_t size) { if (m_master->is_closed()) return 0; diff --git a/Kernel/TTY/SlavePTY.h b/Kernel/TTY/SlavePTY.h index ffe7ebd8b1..83387d8731 100644 --- a/Kernel/TTY/SlavePTY.h +++ b/Kernel/TTY/SlavePTY.h @@ -21,9 +21,9 @@ private: virtual ssize_t on_tty_write(const byte*, ssize_t) override; // ^CharacterDevice - virtual bool can_read(FileDescriptor&) const override; - virtual ssize_t read(FileDescriptor&, byte*, ssize_t) override; - virtual bool can_write(FileDescriptor&) const override; + virtual bool can_read(FileDescription&) const override; + virtual ssize_t read(FileDescription&, byte*, ssize_t) override; + virtual bool can_write(FileDescription&) const override; virtual const char* class_name() const override { return "SlavePTY"; } virtual void close() override; diff --git a/Kernel/TTY/TTY.cpp b/Kernel/TTY/TTY.cpp index 3a659a9585..eb82d6f720 100644 --- a/Kernel/TTY/TTY.cpp +++ b/Kernel/TTY/TTY.cpp @@ -24,12 +24,12 @@ void TTY::set_default_termios() memcpy(m_termios.c_cc, default_cc, sizeof(default_cc)); } -ssize_t TTY::read(FileDescriptor&, byte* buffer, ssize_t size) +ssize_t TTY::read(FileDescription&, byte* buffer, ssize_t size) { return m_buffer.read(buffer, size); } -ssize_t TTY::write(FileDescriptor&, const byte* buffer, ssize_t size) +ssize_t TTY::write(FileDescription&, const byte* buffer, ssize_t size) { #ifdef TTY_DEBUG dbgprintf("TTY::write {%u} ", size); @@ -42,12 +42,12 @@ ssize_t TTY::write(FileDescriptor&, const byte* buffer, ssize_t size) return size; } -bool TTY::can_read(FileDescriptor&) const +bool TTY::can_read(FileDescription&) const { return !m_buffer.is_empty(); } -bool TTY::can_write(FileDescriptor&) const +bool TTY::can_write(FileDescription&) const { return true; } @@ -111,7 +111,7 @@ void TTY::set_termios(const termios& t) ); } -int TTY::ioctl(FileDescriptor&, unsigned request, unsigned arg) +int TTY::ioctl(FileDescription&, unsigned request, unsigned arg) { auto& process = current->process(); pid_t pgid; diff --git a/Kernel/TTY/TTY.h b/Kernel/TTY/TTY.h index 150b7c3761..78c7762829 100644 --- a/Kernel/TTY/TTY.h +++ b/Kernel/TTY/TTY.h @@ -10,12 +10,12 @@ class TTY : public CharacterDevice { public: virtual ~TTY() override; - virtual ssize_t read(FileDescriptor&, byte*, ssize_t) override; - virtual ssize_t write(FileDescriptor&, const byte*, ssize_t) override; - virtual bool can_read(FileDescriptor&) const override; - virtual bool can_write(FileDescriptor&) const override; - virtual int ioctl(FileDescriptor&, unsigned request, unsigned arg) override final; - virtual String absolute_path(const FileDescriptor&) const override { return tty_name(); } + virtual ssize_t read(FileDescription&, byte*, ssize_t) override; + virtual ssize_t write(FileDescription&, const byte*, ssize_t) override; + virtual bool can_read(FileDescription&) const override; + virtual bool can_write(FileDescription&) const override; + virtual int ioctl(FileDescription&, unsigned request, unsigned arg) override final; + virtual String absolute_path(const FileDescription&) const override { return tty_name(); } virtual String tty_name() const = 0; diff --git a/Kernel/Thread.cpp b/Kernel/Thread.cpp index 62caa2ce23..0d53125938 100644 --- a/Kernel/Thread.cpp +++ b/Kernel/Thread.cpp @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include #include @@ -129,7 +129,7 @@ void Thread::block(Thread::State new_state) process().big_lock().lock(); } -void Thread::block(Thread::State new_state, FileDescriptor& descriptor) +void Thread::block(Thread::State new_state, FileDescription& descriptor) { m_blocked_descriptor = &descriptor; block(new_state); @@ -512,7 +512,7 @@ Thread* Thread::clone(Process& process) return clone; } -KResult Thread::wait_for_connect(FileDescriptor& descriptor) +KResult Thread::wait_for_connect(FileDescription& descriptor) { ASSERT(descriptor.is_socket()); auto& socket = *descriptor.socket(); diff --git a/Kernel/Thread.h b/Kernel/Thread.h index 40f7abba11..328d2b0388 100644 --- a/Kernel/Thread.h +++ b/Kernel/Thread.h @@ -12,7 +12,7 @@ #include class Alarm; -class FileDescriptor; +class FileDescription; class Process; class Region; class Thread; @@ -97,13 +97,13 @@ public: void sleep(dword ticks); void block(Thread::State); - void block(Thread::State, FileDescriptor&); + void block(Thread::State, FileDescription&); void unblock(); void set_wakeup_time(qword t) { m_wakeup_time = t; } qword wakeup_time() const { return m_wakeup_time; } void snooze_until(Alarm&); - KResult wait_for_connect(FileDescriptor&); + KResult wait_for_connect(FileDescription&); const FarPtr& far_ptr() const { return m_far_ptr; } @@ -181,7 +181,7 @@ private: RetainPtr m_kernel_stack_region; RetainPtr m_kernel_stack_for_signal_handler_region; pid_t m_waitee_pid { -1 }; - RetainPtr m_blocked_descriptor; + RetainPtr m_blocked_descriptor; timeval m_select_timeout; SignalActionData m_signal_action_data[32]; Region* m_signal_stack_user_region { nullptr }; -- cgit v1.2.3