mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 15:37:47 +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:
parent
d4ddb0013c
commit
1b4e88fb59
12 changed files with 23 additions and 15 deletions
|
@ -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)
|
||||
|
|
|
@ -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"; }
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue