diff options
39 files changed, 156 insertions, 155 deletions
diff --git a/Kernel/Console.cpp b/Kernel/Console.cpp index 267926280e..394270a785 100644 --- a/Kernel/Console.cpp +++ b/Kernel/Console.cpp @@ -23,19 +23,19 @@ Console::~Console() { } -bool Console::can_read(Process&) const +bool Console::can_read(FileDescriptor&) const { return false; } -ssize_t Console::read(Process&, byte*, ssize_t) +ssize_t Console::read(FileDescriptor&, 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(Process&, const byte* data, ssize_t size) +ssize_t Console::write(FileDescriptor&, const byte* data, ssize_t size) { if (!size) return 0; diff --git a/Kernel/Console.h b/Kernel/Console.h index b7e19d53af..45101a8d0d 100644 --- a/Kernel/Console.h +++ b/Kernel/Console.h @@ -19,10 +19,10 @@ public: virtual ~Console() override; // ^CharacterDevice - virtual bool can_read(Process&) const override; - virtual bool can_write(Process&) const override { return true; } - virtual ssize_t read(Process&, byte*, ssize_t) override; - virtual ssize_t write(Process&, 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(FileDescriptor&, byte*, ssize_t) override; + virtual ssize_t write(FileDescriptor&, 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 eacf06f4f2..bcdf4bb174 100644 --- a/Kernel/Devices/BXVGADevice.cpp +++ b/Kernel/Devices/BXVGADevice.cpp @@ -103,7 +103,7 @@ KResultOr<Region*> BXVGADevice::mmap(Process& process, LinearAddress preferred_l return region; } -int BXVGADevice::ioctl(Process& process, unsigned request, unsigned arg) +int BXVGADevice::ioctl(FileDescriptor&, unsigned request, unsigned arg) { switch (request) { case BXVGA_DEV_IOCTL_SET_Y_OFFSET: @@ -113,7 +113,7 @@ int BXVGADevice::ioctl(Process& process, unsigned request, unsigned arg) return 0; case BXVGA_DEV_IOCTL_SET_RESOLUTION: { auto* resolution = (const BXVGAResolution*)arg; - if (!process.validate_read_typed(resolution)) + if (!current->process().validate_read_typed(resolution)) return -EFAULT; set_resolution(resolution->width, resolution->height); return 0; @@ -123,22 +123,22 @@ int BXVGADevice::ioctl(Process& process, unsigned request, unsigned arg) }; } -bool BXVGADevice::can_read(Process&) const +bool BXVGADevice::can_read(FileDescriptor&) const { ASSERT_NOT_REACHED(); } -bool BXVGADevice::can_write(Process&) const +bool BXVGADevice::can_write(FileDescriptor&) const { ASSERT_NOT_REACHED(); } -ssize_t BXVGADevice::read(Process&, byte*, ssize_t) +ssize_t BXVGADevice::read(FileDescriptor&, byte*, ssize_t) { ASSERT_NOT_REACHED(); } -ssize_t BXVGADevice::write(Process&, const byte*, ssize_t) +ssize_t BXVGADevice::write(FileDescriptor&, const byte*, ssize_t) { ASSERT_NOT_REACHED(); } diff --git a/Kernel/Devices/BXVGADevice.h b/Kernel/Devices/BXVGADevice.h index 4db38fc577..96207d400d 100644 --- a/Kernel/Devices/BXVGADevice.h +++ b/Kernel/Devices/BXVGADevice.h @@ -17,7 +17,7 @@ public: void set_resolution(int width, int height); void set_y_offset(int); - virtual int ioctl(Process&, unsigned request, unsigned arg) override; + virtual int ioctl(FileDescriptor&, unsigned request, unsigned arg) override; virtual KResultOr<Region*> mmap(Process&, LinearAddress preferred_laddr, size_t offset, size_t) override; size_t framebuffer_size_in_bytes() const { return m_framebuffer_size.area() * sizeof(dword) * 2; } @@ -25,10 +25,10 @@ public: private: virtual const char* class_name() const override { return "BXVGA"; } - virtual bool can_read(Process&) const override; - virtual bool can_write(Process&) const override; - virtual ssize_t read(Process&, byte*, ssize_t) override; - virtual ssize_t write(Process&, const byte*, ssize_t) override; + 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; void set_register(word index, word value); dword find_framebuffer_address(); diff --git a/Kernel/Devices/DebugLogDevice.cpp b/Kernel/Devices/DebugLogDevice.cpp index 321cd97d35..daa879ffb1 100644 --- a/Kernel/Devices/DebugLogDevice.cpp +++ b/Kernel/Devices/DebugLogDevice.cpp @@ -19,7 +19,7 @@ DebugLogDevice::~DebugLogDevice() { } -ssize_t DebugLogDevice::write(Process&, const byte* data, ssize_t data_size) +ssize_t DebugLogDevice::write(FileDescriptor&, 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 dd6db9f4d2..9b09205074 100644 --- a/Kernel/Devices/DebugLogDevice.h +++ b/Kernel/Devices/DebugLogDevice.h @@ -9,9 +9,9 @@ public: private: // ^CharacterDevice - virtual ssize_t read(Process&, byte*, ssize_t) override { return 0; } - virtual ssize_t write(Process&, const byte*, ssize_t) override; - virtual bool can_write(Process&) const override { return true; } - virtual bool can_read(Process&) const override { return true; } + 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 const char* class_name() const override { return "DebugLogDevice"; } }; diff --git a/Kernel/Devices/FullDevice.cpp b/Kernel/Devices/FullDevice.cpp index 2b9ad32b4a..024cd699e2 100644 --- a/Kernel/Devices/FullDevice.cpp +++ b/Kernel/Devices/FullDevice.cpp @@ -12,19 +12,19 @@ FullDevice::~FullDevice() { } -bool FullDevice::can_read(Process&) const +bool FullDevice::can_read(FileDescriptor&) const { return true; } -ssize_t FullDevice::read(Process&, byte* buffer, ssize_t size) +ssize_t FullDevice::read(FileDescriptor&, byte* buffer, ssize_t size) { ssize_t count = min(PAGE_SIZE, size); memset(buffer, 0, (size_t)count); return count; } -ssize_t FullDevice::write(Process&, const byte*, ssize_t size) +ssize_t FullDevice::write(FileDescriptor&, const byte*, ssize_t size) { if (size == 0) return 0; diff --git a/Kernel/Devices/FullDevice.h b/Kernel/Devices/FullDevice.h index b494656047..c88e6f6857 100644 --- a/Kernel/Devices/FullDevice.h +++ b/Kernel/Devices/FullDevice.h @@ -10,10 +10,10 @@ public: private: // ^CharacterDevice - virtual ssize_t read(Process&, byte*, ssize_t) override; - virtual ssize_t write(Process&, const byte*, ssize_t) override; - virtual bool can_read(Process&) const override; - virtual bool can_write(Process&) 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(FileDescriptor&) const override; + virtual bool can_write(FileDescriptor&) 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 9348ed7f23..856fcc2fb8 100644 --- a/Kernel/Devices/KeyboardDevice.cpp +++ b/Kernel/Devices/KeyboardDevice.cpp @@ -208,12 +208,12 @@ KeyboardDevice::~KeyboardDevice() { } -bool KeyboardDevice::can_read(Process&) const +bool KeyboardDevice::can_read(FileDescriptor&) const { return !m_queue.is_empty(); } -ssize_t KeyboardDevice::read(Process&, byte* buffer, ssize_t size) +ssize_t KeyboardDevice::read(FileDescriptor&, byte* buffer, ssize_t size) { ssize_t nread = 0; while (nread < size) { @@ -229,7 +229,7 @@ ssize_t KeyboardDevice::read(Process&, byte* buffer, ssize_t size) return nread; } -ssize_t KeyboardDevice::write(Process&, const byte*, ssize_t) +ssize_t KeyboardDevice::write(FileDescriptor&, const byte*, ssize_t) { return 0; } diff --git a/Kernel/Devices/KeyboardDevice.h b/Kernel/Devices/KeyboardDevice.h index 8931deab12..c6e9fa972e 100644 --- a/Kernel/Devices/KeyboardDevice.h +++ b/Kernel/Devices/KeyboardDevice.h @@ -22,10 +22,10 @@ public: void set_client(KeyboardClient* client) { m_client = client; } // ^CharacterDevice - virtual ssize_t read(Process&, byte* buffer, ssize_t) override; - virtual bool can_read(Process&) const override; - virtual ssize_t write(Process&, const byte* buffer, ssize_t) override; - virtual bool can_write(Process&) const override { return true; } + 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; } private: // ^IRQHandler diff --git a/Kernel/Devices/NullDevice.cpp b/Kernel/Devices/NullDevice.cpp index eae5a2e037..e93bd55891 100644 --- a/Kernel/Devices/NullDevice.cpp +++ b/Kernel/Devices/NullDevice.cpp @@ -20,17 +20,17 @@ NullDevice::~NullDevice() { } -bool NullDevice::can_read(Process&) const +bool NullDevice::can_read(FileDescriptor&) const { return true; } -ssize_t NullDevice::read(Process&, byte*, ssize_t) +ssize_t NullDevice::read(FileDescriptor&, byte*, ssize_t) { return 0; } -ssize_t NullDevice::write(Process&, const byte*, ssize_t buffer_size) +ssize_t NullDevice::write(FileDescriptor&, 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 d325bbecb5..b00cfeed67 100644 --- a/Kernel/Devices/NullDevice.h +++ b/Kernel/Devices/NullDevice.h @@ -12,10 +12,10 @@ public: private: // ^CharacterDevice - virtual ssize_t read(Process&, byte*, ssize_t) override; - virtual ssize_t write(Process&, const byte*, ssize_t) override; - virtual bool can_write(Process&) const override { return true; } - virtual bool can_read(Process&) 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(FileDescriptor&) const override; virtual const char* class_name() const override { return "NullDevice"; } }; diff --git a/Kernel/Devices/PS2MouseDevice.cpp b/Kernel/Devices/PS2MouseDevice.cpp index b21f489b63..0af6ca4010 100644 --- a/Kernel/Devices/PS2MouseDevice.cpp +++ b/Kernel/Devices/PS2MouseDevice.cpp @@ -160,12 +160,12 @@ byte PS2MouseDevice::mouse_read() return IO::in8(0x60); } -bool PS2MouseDevice::can_read(Process&) const +bool PS2MouseDevice::can_read(FileDescriptor&) const { return !m_queue.is_empty(); } -ssize_t PS2MouseDevice::read(Process&, byte* buffer, ssize_t size) +ssize_t PS2MouseDevice::read(FileDescriptor&, byte* buffer, ssize_t size) { ssize_t nread = 0; while (nread < size) { @@ -181,7 +181,7 @@ ssize_t PS2MouseDevice::read(Process&, byte* buffer, ssize_t size) return nread; } -ssize_t PS2MouseDevice::write(Process&, const byte*, ssize_t) +ssize_t PS2MouseDevice::write(FileDescriptor&, const byte*, ssize_t) { return 0; } diff --git a/Kernel/Devices/PS2MouseDevice.h b/Kernel/Devices/PS2MouseDevice.h index 3ca6832797..a3e4eef698 100644 --- a/Kernel/Devices/PS2MouseDevice.h +++ b/Kernel/Devices/PS2MouseDevice.h @@ -13,10 +13,10 @@ public: static PS2MouseDevice& the(); // ^CharacterDevice - virtual bool can_read(Process&) const override; - virtual ssize_t read(Process&, byte*, ssize_t) override; - virtual ssize_t write(Process&, const byte*, ssize_t) override; - virtual bool can_write(Process&) const override { return true; } + 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; } private: // ^IRQHandler diff --git a/Kernel/Devices/RandomDevice.cpp b/Kernel/Devices/RandomDevice.cpp index 25d9159dd2..354212fbcd 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(Process&) const +bool RandomDevice::can_read(FileDescriptor&) const { return true; } -ssize_t RandomDevice::read(Process&, byte* buffer, ssize_t size) +ssize_t RandomDevice::read(FileDescriptor&, 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(Process&, byte* buffer, ssize_t size) return nread; } -ssize_t RandomDevice::write(Process&, const byte*, ssize_t size) +ssize_t RandomDevice::write(FileDescriptor&, 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 7de52f0d82..fe7fd1a439 100644 --- a/Kernel/Devices/RandomDevice.h +++ b/Kernel/Devices/RandomDevice.h @@ -12,10 +12,10 @@ public: private: // ^CharacterDevice - virtual ssize_t read(Process&, byte*, ssize_t) override; - virtual ssize_t write(Process&, const byte*, ssize_t) override; - virtual bool can_read(Process&) const override; - virtual bool can_write(Process&) 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(FileDescriptor&) const override; + virtual bool can_write(FileDescriptor&) 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 be9ef67529..ee809045bc 100644 --- a/Kernel/Devices/ZeroDevice.cpp +++ b/Kernel/Devices/ZeroDevice.cpp @@ -11,19 +11,19 @@ ZeroDevice::~ZeroDevice() { } -bool ZeroDevice::can_read(Process&) const +bool ZeroDevice::can_read(FileDescriptor&) const { return true; } -ssize_t ZeroDevice::read(Process&, byte* buffer, ssize_t size) +ssize_t ZeroDevice::read(FileDescriptor&, byte* buffer, ssize_t size) { ssize_t count = min(PAGE_SIZE, size); memset(buffer, 0, (size_t)count); return count; } -ssize_t ZeroDevice::write(Process&, const byte*, ssize_t size) +ssize_t ZeroDevice::write(FileDescriptor&, const byte*, ssize_t size) { return min(PAGE_SIZE, size); } diff --git a/Kernel/Devices/ZeroDevice.h b/Kernel/Devices/ZeroDevice.h index cfcb00db9c..74cfb60361 100644 --- a/Kernel/Devices/ZeroDevice.h +++ b/Kernel/Devices/ZeroDevice.h @@ -10,10 +10,10 @@ public: private: // ^CharacterDevice - virtual ssize_t read(Process&, byte*, ssize_t) override; - virtual ssize_t write(Process&, const byte*, ssize_t) override; - virtual bool can_read(Process&) const override; - virtual bool can_write(Process&) 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(FileDescriptor&) const override; + virtual bool can_write(FileDescriptor&) const override { return true; } virtual const char* class_name() const override { return "ZeroDevice"; } }; diff --git a/Kernel/File.cpp b/Kernel/File.cpp index 8f09ad25e8..78a1371cef 100644 --- a/Kernel/File.cpp +++ b/Kernel/File.cpp @@ -19,7 +19,7 @@ void File::close() { } -int File::ioctl(Process&, unsigned, unsigned) +int File::ioctl(FileDescriptor&, unsigned, unsigned) { return -ENOTTY; } diff --git a/Kernel/File.h b/Kernel/File.h index fcc0db246d..60fbab1d41 100644 --- a/Kernel/File.h +++ b/Kernel/File.h @@ -18,12 +18,12 @@ public: virtual KResultOr<Retained<FileDescriptor>> open(int options); virtual void close(); - virtual bool can_read(Process&) const = 0; - virtual bool can_write(Process&) const = 0; + virtual bool can_read(FileDescriptor&) const = 0; + virtual bool can_write(FileDescriptor&) const = 0; - virtual ssize_t read(Process&, byte*, ssize_t) = 0; - virtual ssize_t write(Process&, const byte*, ssize_t) = 0; - virtual int ioctl(Process&, unsigned request, unsigned arg); + 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<Region*> mmap(Process&, LinearAddress preferred_laddr, size_t offset, size_t size); virtual String absolute_path() const = 0; diff --git a/Kernel/FileSystem/FIFO.cpp b/Kernel/FileSystem/FIFO.cpp index 1bc4a550ac..2564fb9d4a 100644 --- a/Kernel/FileSystem/FIFO.cpp +++ b/Kernel/FileSystem/FIFO.cpp @@ -81,17 +81,17 @@ void FIFO::detach(Direction direction) } } -bool FIFO::can_read(Process&) const +bool FIFO::can_read(FileDescriptor&) const { return !m_buffer.is_empty() || !m_writers; } -bool FIFO::can_write(Process&) const +bool FIFO::can_write(FileDescriptor&) const { return m_buffer.bytes_in_write_buffer() < 4096; } -ssize_t FIFO::read(Process&, byte* buffer, ssize_t size) +ssize_t FIFO::read(FileDescriptor&, byte* buffer, ssize_t size) { if (!m_writers && m_buffer.is_empty()) return 0; @@ -105,7 +105,7 @@ ssize_t FIFO::read(Process&, byte* buffer, ssize_t size) return nread; } -ssize_t FIFO::write(Process&, const byte* buffer, ssize_t size) +ssize_t FIFO::write(FileDescriptor&, const byte* buffer, ssize_t size) { if (!m_readers) return 0; diff --git a/Kernel/FileSystem/FIFO.h b/Kernel/FileSystem/FIFO.h index 4e72032c28..e10d6e6c22 100644 --- a/Kernel/FileSystem/FIFO.h +++ b/Kernel/FileSystem/FIFO.h @@ -26,10 +26,10 @@ public: private: // ^File - virtual ssize_t write(Process&, const byte*, ssize_t) override; - virtual ssize_t read(Process&, byte*, ssize_t) override; - virtual bool can_read(Process&) const override; - virtual bool can_write(Process&) const override; + 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 override; virtual const char* class_name() const override { return "FIFO"; } virtual bool is_fifo() const override { return true; } diff --git a/Kernel/FileSystem/FileDescriptor.cpp b/Kernel/FileSystem/FileDescriptor.cpp index b185ed5585..3add6c4739 100644 --- a/Kernel/FileSystem/FileDescriptor.cpp +++ b/Kernel/FileSystem/FileDescriptor.cpp @@ -173,10 +173,10 @@ off_t FileDescriptor::seek(off_t offset, int whence) return m_current_offset; } -ssize_t FileDescriptor::read(Process& process, byte* buffer, ssize_t count) +ssize_t FileDescriptor::read(byte* buffer, ssize_t count) { if (m_file) { - int nread = m_file->read(process, buffer, count); + int nread = m_file->read(*this, buffer, count); if (!m_file->is_seekable()) m_current_offset += nread; return nread; @@ -189,10 +189,10 @@ ssize_t FileDescriptor::read(Process& process, byte* buffer, ssize_t count) return nread; } -ssize_t FileDescriptor::write(Process& process, const byte* data, ssize_t size) +ssize_t FileDescriptor::write(const byte* data, ssize_t size) { if (m_file) { - int nwritten = m_file->write(process, data, size); + int nwritten = m_file->write(*this, data, size); if (m_file->is_seekable()) m_current_offset += nwritten; return nwritten; @@ -205,25 +205,25 @@ ssize_t FileDescriptor::write(Process& process, const byte* data, ssize_t size) return nwritten; } -bool FileDescriptor::can_write(Process& process) +bool FileDescriptor::can_write() { if (m_file) - return m_file->can_write(process); + return m_file->can_write(*this); if (m_socket) return m_socket->can_write(m_socket_role); return true; } -bool FileDescriptor::can_read(Process& process) +bool FileDescriptor::can_read() { if (m_file) - return m_file->can_read(process); + return m_file->can_read(*this); if (m_socket) return m_socket->can_read(m_socket_role); return true; } -ByteBuffer FileDescriptor::read_entire_file(Process& process) +ByteBuffer FileDescriptor::read_entire_file() { // HACK ALERT: (This entire function) @@ -231,7 +231,7 @@ ByteBuffer FileDescriptor::read_entire_file(Process& process) if (m_file) { auto buffer = ByteBuffer::create_uninitialized(1024); - ssize_t nread = m_file->read(process, buffer.pointer(), buffer.size()); + ssize_t nread = m_file->read(*this, buffer.pointer(), buffer.size()); ASSERT(nread >= 0); buffer.trim(nread); return buffer; diff --git a/Kernel/FileSystem/FileDescriptor.h b/Kernel/FileSystem/FileDescriptor.h index 33b4ee1062..7de49267f2 100644 --- a/Kernel/FileSystem/FileDescriptor.h +++ b/Kernel/FileSystem/FileDescriptor.h @@ -30,18 +30,18 @@ public: int close(); off_t seek(off_t, int whence); - ssize_t read(Process&, byte*, ssize_t); - ssize_t write(Process&, const byte* data, ssize_t); + ssize_t read(byte*, ssize_t); + ssize_t write(const byte* data, ssize_t); KResult fstat(stat&); KResult fchmod(mode_t); - bool can_read(Process&); - bool can_write(Process&); + bool can_read(); + bool can_write(); ssize_t get_dir_entries(byte* buffer, ssize_t); - ByteBuffer read_entire_file(Process&); + ByteBuffer read_entire_file(); KResultOr<String> absolute_path(); diff --git a/Kernel/KSyms.cpp b/Kernel/KSyms.cpp index e07c86089b..92ad15d785 100644 --- a/Kernel/KSyms.cpp +++ b/Kernel/KSyms.cpp @@ -135,7 +135,7 @@ void load_ksyms() auto result = VFS::the().open("/kernel.map", 0, 0, *VFS::the().root_inode()); ASSERT(!result.is_error()); auto descriptor = result.value(); - auto buffer = descriptor->read_entire_file(current->process()); + auto buffer = descriptor->read_entire_file(); ASSERT(buffer); load_ksyms_from_data(buffer); } diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index 7810a39e53..64a5959a77 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -837,14 +837,14 @@ ssize_t Process::sys$write(int fd, const byte* data, ssize_t size) #ifdef IO_DEBUG dbgprintf("while %u < %u\n", nwritten, size); #endif - if (!descriptor->can_write(*this)) { + if (!descriptor->can_write()) { #ifdef IO_DEBUG dbgprintf("block write on %d\n", fd); #endif current->m_blocked_fd = fd; current->block(Thread::State::BlockedWrite); } - ssize_t rc = descriptor->write(*this, (const byte*)data + nwritten, size - nwritten); + ssize_t rc = descriptor->write((const byte*)data + nwritten, size - nwritten); #ifdef IO_DEBUG dbgprintf(" -> write returned %d\n", rc); #endif @@ -863,7 +863,7 @@ ssize_t Process::sys$write(int fd, const byte* data, ssize_t size) nwritten += rc; } } else { - nwritten = descriptor->write(*this, (const byte*)data, size); + nwritten = descriptor->write((const byte*)data, size); } if (current->has_unmasked_pending_signals()) { current->block(Thread::State::BlockedSignal); @@ -888,14 +888,14 @@ ssize_t Process::sys$read(int fd, byte* buffer, ssize_t size) if (!descriptor) return -EBADF; if (descriptor->is_blocking()) { - if (!descriptor->can_read(*this)) { + if (!descriptor->can_read()) { current->m_blocked_fd = fd; current->block(Thread::State::BlockedRead); if (current->m_was_interrupted_while_blocked) return -EINTR; } } - return descriptor->read(*this, buffer, size); + return descriptor->read(buffer, size); } int Process::sys$close(int fd) @@ -1014,7 +1014,7 @@ int Process::sys$readlink(const char* path, char* buffer, ssize_t size) if (!descriptor->metadata().is_symlink()) return -EINVAL; - auto contents = descriptor->read_entire_file(*this); + auto contents = descriptor->read_entire_file(); if (!contents) return -EIO; // FIXME: Get a more detailed error from VFS. @@ -1540,7 +1540,7 @@ int Process::sys$ioctl(int fd, unsigned request, unsigned arg) return -EBADF; if (!descriptor->is_file()) return -ENOTTY; - return descriptor->file()->ioctl(*this, request, arg); + return descriptor->file()->ioctl(*descriptor, request, arg); } int Process::sys$getdtablesize() @@ -1755,7 +1755,7 @@ int Process::sys$select(const Syscall::SC_select_params* params) auto* descriptor = file_descriptor(fd); if (!descriptor) continue; - if (descriptor->can_read(*this)) { + if (descriptor->can_read()) { bitmap.set(fd, true); ++markedfds; } @@ -1769,7 +1769,7 @@ int Process::sys$select(const Syscall::SC_select_params* params) auto* descriptor = file_descriptor(fd); if (!descriptor) continue; - if (descriptor->can_write(*this)) { + if (descriptor->can_write()) { bitmap.set(fd, true); ++markedfds; } @@ -1807,9 +1807,9 @@ int Process::sys$poll(pollfd* fds, int nfds, int timeout) continue; } fds[i].revents = 0; - if (fds[i].events & POLLIN && descriptor->can_read(*this)) + if (fds[i].events & POLLIN && descriptor->can_read()) fds[i].revents |= POLLIN; - if (fds[i].events & POLLOUT && descriptor->can_write(*this)) + if (fds[i].events & POLLOUT && descriptor->can_write()) fds[i].revents |= POLLOUT; if (fds[i].revents) diff --git a/Kernel/ProcessTracer.cpp b/Kernel/ProcessTracer.cpp index 30889a121d..5805a84f70 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(Process&, byte* buffer, int buffer_size) +int ProcessTracer::read(FileDescriptor&, byte* buffer, int buffer_size) { if (m_calls.is_empty()) return 0; diff --git a/Kernel/ProcessTracer.h b/Kernel/ProcessTracer.h index 355d5512d1..8cc043d8fe 100644 --- a/Kernel/ProcessTracer.h +++ b/Kernel/ProcessTracer.h @@ -12,11 +12,11 @@ public: bool is_dead() const { return m_dead; } void set_dead() { m_dead = true; } - virtual bool can_read(Process&) const override { return !m_calls.is_empty() || m_dead; } - virtual int read(Process&, byte*, int) override; + virtual bool can_read(FileDescriptor&) const override { return !m_calls.is_empty() || m_dead; } + virtual int read(FileDescriptor&, byte*, int) override; - virtual bool can_write(Process&) const override { return true; } - virtual int write(Process&, const byte*, int) override { return -EIO; } + virtual bool can_write(FileDescriptor&) const override { return true; } + virtual int write(FileDescriptor&, const byte*, int) override { return -EIO; } virtual String absolute_path() const override; diff --git a/Kernel/Scheduler.cpp b/Kernel/Scheduler.cpp index 14507c4bfb..a92e57041f 100644 --- a/Kernel/Scheduler.cpp +++ b/Kernel/Scheduler.cpp @@ -90,14 +90,14 @@ bool Scheduler::pick_next() if (thread.state() == Thread::BlockedRead) { ASSERT(thread.m_blocked_fd != -1); // FIXME: Block until the amount of data wanted is available. - if (process.m_fds[thread.m_blocked_fd].descriptor->can_read(process)) + if (process.m_fds[thread.m_blocked_fd].descriptor->can_read()) thread.unblock(); return IterationDecision::Continue; } if (thread.state() == Thread::BlockedWrite) { ASSERT(thread.m_blocked_fd != -1); - if (process.m_fds[thread.m_blocked_fd].descriptor->can_write(process)) + if (process.m_fds[thread.m_blocked_fd].descriptor->can_write()) thread.unblock(); return IterationDecision::Continue; } @@ -130,13 +130,13 @@ bool Scheduler::pick_next() } } for (int fd : thread.m_select_read_fds) { - if (process.m_fds[fd].descriptor->can_read(process)) { + if (process.m_fds[fd].descriptor->can_read()) { thread.unblock(); return IterationDecision::Continue; } } for (int fd : thread.m_select_write_fds) { - if (process.m_fds[fd].descriptor->can_write(process)) { + if (process.m_fds[fd].descriptor->can_write()) { thread.unblock(); return IterationDecision::Continue; } diff --git a/Kernel/SharedMemory.cpp b/Kernel/SharedMemory.cpp index 698efbf8db..72472f3073 100644 --- a/Kernel/SharedMemory.cpp +++ b/Kernel/SharedMemory.cpp @@ -73,7 +73,7 @@ String SharedMemory::absolute_path() const return String::format("shm:%u", this); } -int SharedMemory::read(Process&, byte* buffer, int buffer_size) +int SharedMemory::read(FileDescriptor&, byte* buffer, int buffer_size) { UNUSED_PARAM(buffer); UNUSED_PARAM(buffer_size); @@ -81,7 +81,7 @@ int SharedMemory::read(Process&, byte* buffer, int buffer_size) ASSERT_NOT_REACHED(); } -int SharedMemory::write(Process&, const byte* data, int data_size) +int SharedMemory::write(FileDescriptor&, const byte* data, int data_size) { UNUSED_PARAM(data); UNUSED_PARAM(data_size); diff --git a/Kernel/SharedMemory.h b/Kernel/SharedMemory.h index a7347274ea..0641519503 100644 --- a/Kernel/SharedMemory.h +++ b/Kernel/SharedMemory.h @@ -24,10 +24,10 @@ public: private: // ^File - virtual bool can_read(Process&) const override { return true; } - virtual bool can_write(Process&) const override { return true; } - virtual int read(Process&, byte*, int) override; - virtual int write(Process&, const byte*, int) override; + 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 override; virtual const char* class_name() const override { return "SharedMemory"; } virtual bool is_shared_memory() const override { return true; } diff --git a/Kernel/TTY/MasterPTY.cpp b/Kernel/TTY/MasterPTY.cpp index 6c9fd6a6ef..f4fd8b6b98 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(Process&, byte* buffer, ssize_t size) +ssize_t MasterPTY::read(FileDescriptor&, byte* buffer, ssize_t size) { if (!m_slave && m_buffer.is_empty()) return 0; return m_buffer.read(buffer, size); } -ssize_t MasterPTY::write(Process&, const byte* buffer, ssize_t size) +ssize_t MasterPTY::write(FileDescriptor&, const byte* buffer, ssize_t size) { if (!m_slave) return -EIO; @@ -46,14 +46,14 @@ ssize_t MasterPTY::write(Process&, const byte* buffer, ssize_t size) return size; } -bool MasterPTY::can_read(Process&) const +bool MasterPTY::can_read(FileDescriptor&) const { if (!m_slave) return true; return !m_buffer.is_empty(); } -bool MasterPTY::can_write(Process&) const +bool MasterPTY::can_write(FileDescriptor&) const { return true; } @@ -96,9 +96,9 @@ void MasterPTY::close() } } -int MasterPTY::ioctl(Process& process, unsigned request, unsigned arg) +int MasterPTY::ioctl(FileDescriptor& descriptor, unsigned request, unsigned arg) { if (request == TIOCSWINSZ) - return m_slave->ioctl(process, request, arg); + return m_slave->ioctl(descriptor, request, arg); return -EINVAL; } diff --git a/Kernel/TTY/MasterPTY.h b/Kernel/TTY/MasterPTY.h index c98dd625f9..22fd3db48e 100644 --- a/Kernel/TTY/MasterPTY.h +++ b/Kernel/TTY/MasterPTY.h @@ -20,13 +20,13 @@ public: private: // ^CharacterDevice - virtual ssize_t read(Process&, byte*, ssize_t) override; - virtual ssize_t write(Process&, const byte*, ssize_t) override; - virtual bool can_read(Process&) const override; - virtual bool can_write(Process&) 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(FileDescriptor&) const override; + virtual bool can_write(FileDescriptor&) const override; virtual void close() override; virtual bool is_master_pty() const override { return true; } - virtual int ioctl(Process&, unsigned request, unsigned arg) override; + virtual int ioctl(FileDescriptor&, unsigned request, unsigned arg) override; virtual const char* class_name() const override { return "MasterPTY"; } RetainPtr<SlavePTY> m_slave; diff --git a/Kernel/TTY/PTYMultiplexer.h b/Kernel/TTY/PTYMultiplexer.h index ec801456c5..59ff194d65 100644 --- a/Kernel/TTY/PTYMultiplexer.h +++ b/Kernel/TTY/PTYMultiplexer.h @@ -16,10 +16,10 @@ public: // ^CharacterDevice virtual KResultOr<Retained<FileDescriptor>> open(int options) override; - virtual ssize_t read(Process&, byte*, ssize_t) override { return 0; } - virtual ssize_t write(Process&, const byte*, ssize_t) override { return 0; } - virtual bool can_read(Process&) const override { return true; } - virtual bool can_write(Process&) const override { return true; } + 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; } void notify_master_destroyed(Badge<MasterPTY>, unsigned index); diff --git a/Kernel/TTY/SlavePTY.cpp b/Kernel/TTY/SlavePTY.cpp index 4725f815a3..c16319566a 100644 --- a/Kernel/TTY/SlavePTY.cpp +++ b/Kernel/TTY/SlavePTY.cpp @@ -41,23 +41,23 @@ ssize_t SlavePTY::on_tty_write(const byte* data, ssize_t size) return m_master->on_slave_write(data, size); } -bool SlavePTY::can_write(Process&) const +bool SlavePTY::can_write(FileDescriptor&) const { return m_master->can_write_from_slave(); } -bool SlavePTY::can_read(Process& process) const +bool SlavePTY::can_read(FileDescriptor& descriptor) const { if (m_master->is_closed()) return true; - return TTY::can_read(process); + return TTY::can_read(descriptor); } -ssize_t SlavePTY::read(Process& process, byte* buffer, ssize_t size) +ssize_t SlavePTY::read(FileDescriptor& descriptor, byte* buffer, ssize_t size) { if (m_master->is_closed()) return 0; - return TTY::read(process, buffer, size); + return TTY::read(descriptor, buffer, size); } void SlavePTY::close() diff --git a/Kernel/TTY/SlavePTY.h b/Kernel/TTY/SlavePTY.h index 56ecb33c61..f764c43649 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(Process&) const override; - virtual ssize_t read(Process&, byte*, ssize_t) override; - virtual bool can_write(Process&) const override; + virtual bool can_read(FileDescriptor&) const override; + virtual ssize_t read(FileDescriptor&, byte*, ssize_t) override; + virtual bool can_write(FileDescriptor&) 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 ebcb7e196d..5c02f4c5a9 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(Process&, byte* buffer, ssize_t size) +ssize_t TTY::read(FileDescriptor&, byte* buffer, ssize_t size) { return m_buffer.read(buffer, size); } -ssize_t TTY::write(Process&, const byte* buffer, ssize_t size) +ssize_t TTY::write(FileDescriptor&, const byte* buffer, ssize_t size) { #ifdef TTY_DEBUG dbgprintf("TTY::write {%u} ", size); @@ -42,12 +42,12 @@ ssize_t TTY::write(Process&, const byte* buffer, ssize_t size) return size; } -bool TTY::can_read(Process&) const +bool TTY::can_read(FileDescriptor&) const { return !m_buffer.is_empty(); } -bool TTY::can_write(Process&) const +bool TTY::can_write(FileDescriptor&) const { return true; } @@ -106,8 +106,9 @@ void TTY::set_termios(const termios& t) ); } -int TTY::ioctl(Process& process, unsigned request, unsigned arg) +int TTY::ioctl(FileDescriptor&, unsigned request, unsigned arg) { + auto& process = current->process(); pid_t pgid; termios* tp; winsize* ws; diff --git a/Kernel/TTY/TTY.h b/Kernel/TTY/TTY.h index bcd2146b49..ffda96f967 100644 --- a/Kernel/TTY/TTY.h +++ b/Kernel/TTY/TTY.h @@ -10,11 +10,11 @@ class TTY : public CharacterDevice { public: virtual ~TTY() override; - virtual ssize_t read(Process&, byte*, ssize_t) override; - virtual ssize_t write(Process&, const byte*, ssize_t) override; - virtual bool can_read(Process&) const override; - virtual bool can_write(Process&) const override; - virtual int ioctl(Process&, unsigned request, unsigned arg) override final; + 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 override { return tty_name(); } virtual String tty_name() const = 0; diff --git a/Kernel/kprintf.cpp b/Kernel/kprintf.cpp index fd9037a9ac..884dfa9f39 100644 --- a/Kernel/kprintf.cpp +++ b/Kernel/kprintf.cpp @@ -12,7 +12,7 @@ static void console_putch(char*&, char ch) IO::out8(0xe9, ch); return; } - Console::the().write(current->process(), (byte*)&ch, 1); + Console::the().put_char(ch); } int kprintf(const char* fmt, ...) |