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