mirror of
https://github.com/RGBCube/serenity
synced 2025-07-05 15:57:35 +00:00
Kernel: Use TRY() in FileDescription
This commit is contained in:
parent
f2f5df793a
commit
b0f2acbd91
1 changed files with 15 additions and 26 deletions
|
@ -26,13 +26,8 @@ namespace Kernel {
|
||||||
|
|
||||||
KResultOr<NonnullRefPtr<FileDescription>> FileDescription::try_create(Custody& custody)
|
KResultOr<NonnullRefPtr<FileDescription>> FileDescription::try_create(Custody& custody)
|
||||||
{
|
{
|
||||||
auto inode_file = InodeFile::create(custody.inode());
|
auto inode_file = TRY(InodeFile::create(custody.inode()));
|
||||||
if (inode_file.is_error())
|
auto description = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) FileDescription(move(inode_file))));
|
||||||
return inode_file.error();
|
|
||||||
|
|
||||||
auto description = adopt_ref_if_nonnull(new (nothrow) FileDescription(*inode_file.release_value()));
|
|
||||||
if (!description)
|
|
||||||
return ENOMEM;
|
|
||||||
|
|
||||||
description->m_custody = custody;
|
description->m_custody = custody;
|
||||||
auto result = description->attach();
|
auto result = description->attach();
|
||||||
|
@ -40,20 +35,18 @@ KResultOr<NonnullRefPtr<FileDescription>> FileDescription::try_create(Custody& c
|
||||||
dbgln_if(FILEDESCRIPTION_DEBUG, "Failed to create file description for custody: {}", result);
|
dbgln_if(FILEDESCRIPTION_DEBUG, "Failed to create file description for custody: {}", result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
return description.release_nonnull();
|
return description;
|
||||||
}
|
}
|
||||||
|
|
||||||
KResultOr<NonnullRefPtr<FileDescription>> FileDescription::try_create(File& file)
|
KResultOr<NonnullRefPtr<FileDescription>> FileDescription::try_create(File& file)
|
||||||
{
|
{
|
||||||
auto description = adopt_ref_if_nonnull(new (nothrow) FileDescription(file));
|
auto description = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) FileDescription(file)));
|
||||||
if (!description)
|
|
||||||
return ENOMEM;
|
|
||||||
auto result = description->attach();
|
auto result = description->attach();
|
||||||
if (result.is_error()) {
|
if (result.is_error()) {
|
||||||
dbgln_if(FILEDESCRIPTION_DEBUG, "Failed to create file description for file: {}", result);
|
dbgln_if(FILEDESCRIPTION_DEBUG, "Failed to create file description for file: {}", result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
return description.release_nonnull();
|
return description;
|
||||||
}
|
}
|
||||||
|
|
||||||
FileDescription::FileDescription(File& file)
|
FileDescription::FileDescription(File& file)
|
||||||
|
@ -179,13 +172,11 @@ KResultOr<size_t> FileDescription::read(UserOrKernelBuffer& buffer, size_t count
|
||||||
MutexLocker locker(m_lock);
|
MutexLocker locker(m_lock);
|
||||||
if (Checked<off_t>::addition_would_overflow(m_current_offset, count))
|
if (Checked<off_t>::addition_would_overflow(m_current_offset, count))
|
||||||
return EOVERFLOW;
|
return EOVERFLOW;
|
||||||
auto nread_or_error = m_file->read(*this, offset(), buffer, count);
|
auto nread = TRY(m_file->read(*this, offset(), buffer, count));
|
||||||
if (!nread_or_error.is_error()) {
|
if (m_file->is_seekable())
|
||||||
if (m_file->is_seekable())
|
m_current_offset += nread;
|
||||||
m_current_offset += nread_or_error.value();
|
evaluate_block_conditions();
|
||||||
evaluate_block_conditions();
|
return nread;
|
||||||
}
|
|
||||||
return nread_or_error;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
KResultOr<size_t> FileDescription::write(const UserOrKernelBuffer& data, size_t size)
|
KResultOr<size_t> FileDescription::write(const UserOrKernelBuffer& data, size_t size)
|
||||||
|
@ -193,13 +184,11 @@ KResultOr<size_t> FileDescription::write(const UserOrKernelBuffer& data, size_t
|
||||||
MutexLocker locker(m_lock);
|
MutexLocker locker(m_lock);
|
||||||
if (Checked<off_t>::addition_would_overflow(m_current_offset, size))
|
if (Checked<off_t>::addition_would_overflow(m_current_offset, size))
|
||||||
return EOVERFLOW;
|
return EOVERFLOW;
|
||||||
auto nwritten_or_error = m_file->write(*this, offset(), data, size);
|
auto nwritten = TRY(m_file->write(*this, offset(), data, size));
|
||||||
if (!nwritten_or_error.is_error()) {
|
if (m_file->is_seekable())
|
||||||
if (m_file->is_seekable())
|
m_current_offset += nwritten;
|
||||||
m_current_offset += nwritten_or_error.value();
|
evaluate_block_conditions();
|
||||||
evaluate_block_conditions();
|
return nwritten;
|
||||||
}
|
|
||||||
return nwritten_or_error;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FileDescription::can_write() const
|
bool FileDescription::can_write() const
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue