mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 16:17:45 +00:00
Pass the process to CharacterDevice::read/write.
This is much nicer than grabbing directly at 'current' inside a read().
This commit is contained in:
parent
08bfe518f9
commit
bd3e77cc16
27 changed files with 63 additions and 62 deletions
|
@ -28,14 +28,14 @@ bool Console::can_read(Process&) const
|
|||
return false;
|
||||
}
|
||||
|
||||
ssize_t Console::read(byte*, size_t)
|
||||
ssize_t Console::read(Process&, byte*, size_t)
|
||||
{
|
||||
// FIXME: Implement reading from the console.
|
||||
// Maybe we could use a ring buffer for this device?
|
||||
return 0;
|
||||
}
|
||||
|
||||
ssize_t Console::write(const byte* data, size_t size)
|
||||
ssize_t Console::write(Process&, const byte* data, size_t size)
|
||||
{
|
||||
if (!size)
|
||||
return 0;
|
||||
|
|
|
@ -20,8 +20,8 @@ public:
|
|||
|
||||
virtual bool can_read(Process&) const override;
|
||||
virtual bool can_write(Process&) const override { return true; }
|
||||
virtual ssize_t read(byte* buffer, size_t size) override;
|
||||
virtual ssize_t write(const byte* data, size_t size) override;
|
||||
virtual ssize_t read(Process&, byte* buffer, size_t size) override;
|
||||
virtual ssize_t write(Process&, const byte* data, size_t size) override;
|
||||
|
||||
void setImplementation(ConsoleImplementation* implementation) { m_implementation = implementation; }
|
||||
|
||||
|
|
|
@ -128,7 +128,7 @@ void load_ksyms()
|
|||
if (!descriptor) {
|
||||
kprintf("Failed to open /kernel.map\n");
|
||||
} else {
|
||||
auto buffer = descriptor->read_entire_file();
|
||||
auto buffer = descriptor->read_entire_file(*current);
|
||||
ASSERT(buffer);
|
||||
load_ksyms_from_data(buffer);
|
||||
}
|
||||
|
|
|
@ -119,7 +119,7 @@ bool Keyboard::can_read(Process&) const
|
|||
return !m_queue.is_empty();
|
||||
}
|
||||
|
||||
ssize_t Keyboard::read(byte* buffer, size_t size)
|
||||
ssize_t Keyboard::read(Process&, byte* buffer, size_t size)
|
||||
{
|
||||
ssize_t nread = 0;
|
||||
while ((size_t)nread < size) {
|
||||
|
@ -130,7 +130,7 @@ ssize_t Keyboard::read(byte* buffer, size_t size)
|
|||
return nread;
|
||||
}
|
||||
|
||||
ssize_t Keyboard::write(const byte*, size_t)
|
||||
ssize_t Keyboard::write(Process&, const byte*, size_t)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -37,8 +37,8 @@ private:
|
|||
virtual void handle_irq() override;
|
||||
|
||||
// ^CharacterDevice
|
||||
virtual ssize_t read(byte* buffer, size_t) override;
|
||||
virtual ssize_t write(const byte* buffer, size_t) override;
|
||||
virtual ssize_t read(Process&, byte* buffer, size_t) override;
|
||||
virtual ssize_t write(Process&, const byte* buffer, size_t) override;
|
||||
virtual bool can_read(Process&) const override;
|
||||
virtual bool can_write(Process&) const override { return true; }
|
||||
|
||||
|
|
|
@ -20,12 +20,12 @@ String MasterPTY::pts_name() const
|
|||
return buffer;
|
||||
}
|
||||
|
||||
ssize_t MasterPTY::read(byte* buffer, size_t size)
|
||||
ssize_t MasterPTY::read(Process&, byte* buffer, size_t size)
|
||||
{
|
||||
return m_buffer.read(buffer, size);
|
||||
}
|
||||
|
||||
ssize_t MasterPTY::write(const byte* buffer, size_t size)
|
||||
ssize_t MasterPTY::write(Process&, const byte* buffer, size_t size)
|
||||
{
|
||||
m_slave->on_master_write(buffer, size);
|
||||
return size;
|
||||
|
|
|
@ -11,8 +11,8 @@ public:
|
|||
virtual ~MasterPTY() override;
|
||||
void set_slave(SlavePTY& slave) { m_slave = &slave; }
|
||||
|
||||
virtual ssize_t read(byte*, size_t) override;
|
||||
virtual ssize_t write(const byte*, size_t) override;
|
||||
virtual ssize_t read(Process&, byte*, size_t) override;
|
||||
virtual ssize_t write(Process&, const byte*, size_t) override;
|
||||
virtual bool can_read(Process&) const override;
|
||||
virtual bool can_write(Process&) const override;
|
||||
virtual bool is_master_pty() const override { return true; }
|
||||
|
|
|
@ -121,12 +121,12 @@ bool PS2MouseDevice::can_read(Process&) const
|
|||
return !m_buffer.is_empty();
|
||||
}
|
||||
|
||||
ssize_t PS2MouseDevice::read(byte* buffer, size_t size)
|
||||
ssize_t PS2MouseDevice::read(Process&, byte* buffer, size_t size)
|
||||
{
|
||||
return m_buffer.read(buffer, size);
|
||||
}
|
||||
|
||||
ssize_t PS2MouseDevice::write(const byte*, size_t)
|
||||
ssize_t PS2MouseDevice::write(Process&, const byte*, size_t)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -13,8 +13,8 @@ public:
|
|||
|
||||
// ^CharacterDevice
|
||||
virtual bool can_read(Process&) const override;
|
||||
virtual ssize_t read(byte* buffer, size_t) override;
|
||||
virtual ssize_t write(const byte* buffer, size_t) override;
|
||||
virtual ssize_t read(Process&, byte* buffer, size_t) override;
|
||||
virtual ssize_t write(Process&, const byte* buffer, size_t) override;
|
||||
virtual bool can_write(Process&) const override { return true; }
|
||||
|
||||
private:
|
||||
|
|
|
@ -1031,7 +1031,7 @@ ssize_t Process::sys$write(int fd, const void* data, size_t size)
|
|||
block(BlockedWrite);
|
||||
Scheduler::yield();
|
||||
}
|
||||
ssize_t rc = descriptor->write((const byte*)data + nwritten, size - nwritten);
|
||||
ssize_t rc = descriptor->write(*this, (const byte*)data + nwritten, size - nwritten);
|
||||
#ifdef IO_DEBUG
|
||||
dbgprintf(" -> write returned %d\n", rc);
|
||||
#endif
|
||||
|
@ -1051,7 +1051,7 @@ ssize_t Process::sys$write(int fd, const void* data, size_t size)
|
|||
nwritten += rc;
|
||||
}
|
||||
} else {
|
||||
nwritten = descriptor->write((const byte*)data, size);
|
||||
nwritten = descriptor->write(*this, (const byte*)data, size);
|
||||
}
|
||||
if (has_unmasked_pending_signals()) {
|
||||
block(BlockedSignal);
|
||||
|
@ -1084,7 +1084,7 @@ ssize_t Process::sys$read(int fd, void* outbuf, size_t nread)
|
|||
return -EINTR;
|
||||
}
|
||||
}
|
||||
nread = descriptor->read((byte*)outbuf, nread);
|
||||
nread = descriptor->read(*this, (byte*)outbuf, nread);
|
||||
#ifdef DEBUG_IO
|
||||
dbgprintf("%s(%u) Process::sys$read: nread=%u\n", name().characters(), pid(), nread);
|
||||
#endif
|
||||
|
@ -1232,7 +1232,7 @@ int Process::sys$readlink(const char* path, char* buffer, size_t size)
|
|||
if (!descriptor->metadata().isSymbolicLink())
|
||||
return -EINVAL;
|
||||
|
||||
auto contents = descriptor->read_entire_file();
|
||||
auto contents = descriptor->read_entire_file(*this);
|
||||
if (!contents)
|
||||
return -EIO; // FIXME: Get a more detailed error from VFS.
|
||||
|
||||
|
|
|
@ -24,12 +24,12 @@ void TTY::set_default_termios()
|
|||
memcpy(m_termios.c_cc, default_cc, sizeof(default_cc));
|
||||
}
|
||||
|
||||
ssize_t TTY::read(byte* buffer, size_t size)
|
||||
ssize_t TTY::read(Process&, byte* buffer, size_t size)
|
||||
{
|
||||
return m_buffer.read(buffer, size);
|
||||
}
|
||||
|
||||
ssize_t TTY::write(const byte* buffer, size_t size)
|
||||
ssize_t TTY::write(Process&, const byte* buffer, size_t size)
|
||||
{
|
||||
#ifdef TTY_DEBUG
|
||||
dbgprintf("TTY::write {%u} ", size);
|
||||
|
|
|
@ -10,8 +10,8 @@ class TTY : public CharacterDevice {
|
|||
public:
|
||||
virtual ~TTY() override;
|
||||
|
||||
virtual ssize_t read(byte*, size_t) override;
|
||||
virtual ssize_t write(const byte*, size_t) override;
|
||||
virtual ssize_t read(Process&, byte*, size_t) override;
|
||||
virtual ssize_t write(Process&, const byte*, size_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;
|
||||
|
|
|
@ -2,12 +2,13 @@
|
|||
#include "Console.h"
|
||||
#include "IO.h"
|
||||
#include <stdarg.h>
|
||||
#include "Process.h"
|
||||
#include <AK/Types.h>
|
||||
#include <AK/printf.cpp>
|
||||
|
||||
static void console_putch(char*&, char ch)
|
||||
{
|
||||
Console::the().write((byte*)&ch, 1);
|
||||
Console::the().write(*current, (byte*)&ch, 1);
|
||||
}
|
||||
|
||||
int kprintf(const char* fmt, ...)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue