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:
parent
58feebeed2
commit
7a3ab6c517
58 changed files with 223 additions and 229 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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; }
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue