1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-02 22:42:08 +00:00

Kernel: Add FileDescription read/write API that bypasses current offset

Forcing users of a FileDescription to seek before they can read/write
makes it inherently racy. This patch adds variants of read/write that
simply ignore the "current offset" of the description in favor of a
caller-supplied offset.
This commit is contained in:
Andreas Kling 2021-07-16 00:35:48 +02:00
parent ace8b9a0ee
commit d1395f2eb9
2 changed files with 18 additions and 0 deletions

View file

@ -157,6 +157,20 @@ KResultOr<off_t> FileDescription::seek(off_t offset, int whence)
return m_current_offset;
}
KResultOr<size_t> FileDescription::read(UserOrKernelBuffer& buffer, u64 offset, size_t count)
{
if (Checked<u64>::addition_would_overflow(offset, count))
return EOVERFLOW;
return m_file->read(*this, offset, buffer, count);
}
KResultOr<size_t> FileDescription::write(u64 offset, UserOrKernelBuffer const& data, size_t data_size)
{
if (Checked<u64>::addition_would_overflow(offset, data_size))
return EOVERFLOW;
return m_file->write(*this, offset, data, data_size);
}
KResultOr<size_t> FileDescription::read(UserOrKernelBuffer& buffer, size_t count)
{
Locker locker(m_lock);