1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 18:27:39 +00:00

Kernel: Allow File::close() to fail

And pass the result through to sys$close() return value.

Fixes https://github.com/SerenityOS/serenity/issues/427
This commit is contained in:
Sergey Bugaev 2020-06-02 19:20:05 +03:00 committed by Andreas Kling
parent d4ddb0013c
commit 1b4e88fb59
12 changed files with 23 additions and 15 deletions

View file

@ -112,7 +112,7 @@ bool MasterPTY::can_write_from_slave() const
return m_buffer.space_for_writing();
}
void MasterPTY::close()
KResult MasterPTY::close()
{
if (ref_count() == 2) {
InterruptDisabler disabler;
@ -122,6 +122,8 @@ void MasterPTY::close()
m_slave->hang_up();
}
return KSuccess;
}
int MasterPTY::ioctl(FileDescription& description, unsigned request, FlatPtr arg)

View file

@ -54,7 +54,7 @@ private:
virtual ssize_t write(FileDescription&, size_t, const u8*, ssize_t) override;
virtual bool can_read(const FileDescription&, size_t) const override;
virtual bool can_write(const FileDescription&, size_t) const override;
virtual void close() override;
virtual KResult close() override;
virtual bool is_master_pty() const override { return true; }
virtual int ioctl(FileDescription&, unsigned request, FlatPtr arg) override;
virtual const char* class_name() const override { return "MasterPTY"; }

View file

@ -95,9 +95,10 @@ ssize_t SlavePTY::read(FileDescription& description, size_t offset, u8* buffer,
return TTY::read(description, offset, buffer, size);
}
void SlavePTY::close()
KResult SlavePTY::close()
{
m_master->notify_slave_closed({});
return KSuccess;
}
}

View file

@ -51,7 +51,7 @@ private:
virtual ssize_t read(FileDescription&, size_t, u8*, ssize_t) override;
virtual bool can_write(const FileDescription&, size_t) const override;
virtual const char* class_name() const override { return "SlavePTY"; }
virtual void close() override;
virtual KResult close() override;
friend class MasterPTY;
SlavePTY(MasterPTY&, unsigned index);