1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 07:58:11 +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

@ -124,28 +124,32 @@ off_t FileDescription::seek(off_t offset, int whence)
return m_current_offset;
}
ssize_t FileDescription::read(u8* buffer, ssize_t count)
KResultOr<size_t> FileDescription::read(u8* buffer, size_t count)
{
LOCKER(m_lock);
if ((m_current_offset + count) < 0)
Checked<size_t> new_offset = m_current_offset;
new_offset += count;
if (new_offset.has_overflow())
return -EOVERFLOW;
SmapDisabler disabler;
int nread = m_file->read(*this, offset(), buffer, count);
if (nread > 0 && m_file->is_seekable())
m_current_offset += nread;
return nread;
auto nread_or_error = m_file->read(*this, offset(), buffer, count);
if (!nread_or_error.is_error() && m_file->is_seekable())
m_current_offset += nread_or_error.value();
return nread_or_error;
}
ssize_t FileDescription::write(const u8* data, ssize_t size)
KResultOr<size_t> FileDescription::write(const u8* data, size_t size)
{
LOCKER(m_lock);
if ((m_current_offset + size) < 0)
Checked<size_t> new_offset = m_current_offset;
new_offset += size;
if (new_offset.has_overflow())
return -EOVERFLOW;
SmapDisabler disabler;
int nwritten = m_file->write(*this, offset(), data, size);
if (nwritten > 0 && m_file->is_seekable())
m_current_offset += nwritten;
return nwritten;
auto nwritten_or_error = m_file->write(*this, offset(), data, size);
if (!nwritten_or_error.is_error() && m_file->is_seekable())
m_current_offset += nwritten_or_error.value();
return nwritten_or_error;
}
bool FileDescription::can_write() const