1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 06:37:44 +00:00

Kernel: Make File::write() and File::read() return KResultOr<size_t>

Instead of returning a ssize_t where negative values mean error,
we now return KResultOr<size_t> and use the error state to report
errors exclusively.
This commit is contained in:
Andreas Kling 2020-08-04 18:02:23 +02:00
parent 58feebeed2
commit 7a3ab6c517
58 changed files with 223 additions and 229 deletions

View file

@ -60,17 +60,17 @@ String MasterPTY::pts_name() const
return m_pts_name;
}
ssize_t MasterPTY::read(FileDescription&, size_t, u8* buffer, ssize_t size)
KResultOr<size_t> MasterPTY::read(FileDescription&, size_t, u8* buffer, size_t size)
{
if (!m_slave && m_buffer.is_empty())
return 0;
return m_buffer.read(buffer, size);
}
ssize_t MasterPTY::write(FileDescription&, size_t, const u8* buffer, ssize_t size)
KResultOr<size_t> MasterPTY::write(FileDescription&, size_t, const u8* buffer, size_t size)
{
if (!m_slave)
return -EIO;
return KResult(-EIO);
m_slave->on_master_write(buffer, size);
return size;
}

View file

@ -50,8 +50,8 @@ public:
private:
// ^CharacterDevice
virtual ssize_t read(FileDescription&, size_t, u8*, ssize_t) override;
virtual ssize_t write(FileDescription&, size_t, const u8*, ssize_t) override;
virtual KResultOr<size_t> read(FileDescription&, size_t, u8*, size_t) override;
virtual KResultOr<size_t> write(FileDescription&, size_t, const u8*, size_t) override;
virtual bool can_read(const FileDescription&, size_t) const override;
virtual bool can_write(const FileDescription&, size_t) const override;
virtual KResult close() override;

View file

@ -44,8 +44,8 @@ public:
// ^CharacterDevice
virtual KResultOr<NonnullRefPtr<FileDescription>> open(int options) override;
virtual ssize_t read(FileDescription&, size_t, u8*, ssize_t) override { return 0; }
virtual ssize_t write(FileDescription&, size_t, const u8*, ssize_t) override { return 0; }
virtual KResultOr<size_t> read(FileDescription&, size_t, u8*, size_t) override { return 0; }
virtual KResultOr<size_t> write(FileDescription&, size_t, const u8*, size_t) override { return 0; }
virtual bool can_read(const FileDescription&, size_t) const override { return true; }
virtual bool can_write(const FileDescription&, size_t) const override { return true; }

View file

@ -89,7 +89,7 @@ bool SlavePTY::can_read(const FileDescription& description, size_t offset) const
return TTY::can_read(description, offset);
}
ssize_t SlavePTY::read(FileDescription& description, size_t offset, u8* buffer, ssize_t size)
KResultOr<size_t> SlavePTY::read(FileDescription& description, size_t offset, u8* buffer, size_t size)
{
if (m_master->is_closed())
return 0;

View file

@ -48,7 +48,7 @@ private:
// ^CharacterDevice
virtual bool can_read(const FileDescription&, size_t) const override;
virtual ssize_t read(FileDescription&, size_t, u8*, ssize_t) override;
virtual KResultOr<size_t> read(FileDescription&, size_t, u8*, size_t) override;
virtual bool can_write(const FileDescription&, size_t) const override;
virtual const char* class_name() const override { return "SlavePTY"; }
virtual KResult close() override;

View file

@ -52,15 +52,13 @@ void TTY::set_default_termios()
memcpy(m_termios.c_cc, default_cc, sizeof(default_cc));
}
ssize_t TTY::read(FileDescription&, size_t, u8* buffer, ssize_t size)
KResultOr<size_t> TTY::read(FileDescription&, size_t, u8* buffer, size_t size)
{
ASSERT(size >= 0);
if (m_input_buffer.size() < static_cast<size_t>(size))
size = m_input_buffer.size();
if (in_canonical_mode()) {
int i = 0;
size_t i = 0;
for (; i < size; i++) {
u8 ch = m_input_buffer.dequeue();
if (ch == '\0') {
@ -79,21 +77,14 @@ ssize_t TTY::read(FileDescription&, size_t, u8* buffer, ssize_t size)
return i;
}
for (int i = 0; i < size; i++)
for (size_t i = 0; i < size; i++)
buffer[i] = m_input_buffer.dequeue();
return size;
}
ssize_t TTY::write(FileDescription&, size_t, const u8* buffer, ssize_t size)
KResultOr<size_t> TTY::write(FileDescription&, size_t, const u8* buffer, size_t size)
{
#ifdef TTY_DEBUG
dbg() << "TTY::write {" << String::format("%u", size) << "} ";
for (size_t i = 0; i < size; ++i) {
dbg() << String::format("%b ", buffer[i]);
}
dbg() << "";
#endif
on_tty_write(buffer, size);
return size;
}

View file

@ -39,8 +39,8 @@ class TTY : public CharacterDevice {
public:
virtual ~TTY() override;
virtual ssize_t read(FileDescription&, size_t, u8*, ssize_t) override;
virtual ssize_t write(FileDescription&, size_t, const u8*, ssize_t) override;
virtual KResultOr<size_t> read(FileDescription&, size_t, u8*, size_t) override;
virtual KResultOr<size_t> write(FileDescription&, size_t, const u8*, size_t) override;
virtual bool can_read(const FileDescription&, size_t) const override;
virtual bool can_write(const FileDescription&, size_t) const override;
virtual int ioctl(FileDescription&, unsigned request, FlatPtr arg) override final;