mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-12 19:19:30 +00:00
Kernel: Make UserOrKernelBuffer return KResult from read/write/memset
This allows us to simplify a whole bunch of call sites with TRY(). :^)
This commit is contained in:
parent
7bf8844499
commit
b481132418
Notes:
sideshowbarker
2024-07-18 04:32:10 +09:00
Author: https://github.com/awesomekling
Commit: b481132418
29 changed files with 85 additions and 118 deletions
|
@ -156,8 +156,7 @@ KResult BlockBasedFileSystem::write_block(BlockIndex index, const UserOrKernelBu
|
|||
// Fill the cache first.
|
||||
TRY(read_block(index, nullptr, block_size()));
|
||||
}
|
||||
if (!data.read(entry.data + offset, count))
|
||||
return EFAULT;
|
||||
TRY(data.read(entry.data + offset, count));
|
||||
|
||||
cache->mark_dirty(entry);
|
||||
entry.has_data = true;
|
||||
|
@ -238,8 +237,8 @@ KResult BlockBasedFileSystem::read_block(BlockIndex index, UserOrKernelBuffer* b
|
|||
VERIFY(nread == block_size());
|
||||
entry.has_data = true;
|
||||
}
|
||||
if (buffer && !buffer->write(entry.data + offset, count))
|
||||
return EFAULT;
|
||||
if (buffer)
|
||||
TRY(buffer->write(entry.data + offset, count));
|
||||
return KSuccess;
|
||||
});
|
||||
}
|
||||
|
|
|
@ -154,8 +154,7 @@ KResultOr<size_t> DevFSLinkInode::read_bytes(off_t offset, size_t, UserOrKernelB
|
|||
MutexLocker locker(m_inode_lock);
|
||||
VERIFY(offset == 0);
|
||||
VERIFY(m_link);
|
||||
if (!buffer.write(m_link->characters() + offset, m_link->length()))
|
||||
return EFAULT;
|
||||
TRY(buffer.write(m_link->characters() + offset, m_link->length()));
|
||||
return m_link->length();
|
||||
}
|
||||
|
||||
|
|
|
@ -842,8 +842,7 @@ KResultOr<size_t> Ext2FSInode::read_bytes(off_t offset, size_t count, UserOrKern
|
|||
if (is_symlink() && size() < max_inline_symlink_length) {
|
||||
VERIFY(offset == 0);
|
||||
size_t nread = min((off_t)size() - offset, static_cast<off_t>(count));
|
||||
if (!buffer.write(((const u8*)m_raw_inode.i_block) + offset, nread))
|
||||
return EFAULT;
|
||||
TRY(buffer.write(((const u8*)m_raw_inode.i_block) + offset, nread));
|
||||
return nread;
|
||||
}
|
||||
|
||||
|
@ -878,8 +877,7 @@ KResultOr<size_t> Ext2FSInode::read_bytes(off_t offset, size_t count, UserOrKern
|
|||
auto buffer_offset = buffer.offset(nread);
|
||||
if (block_index.value() == 0) {
|
||||
// This is a hole, act as if it's filled with zeroes.
|
||||
if (!buffer_offset.memset(0, num_bytes_to_copy))
|
||||
return EFAULT;
|
||||
TRY(buffer_offset.memset(0, num_bytes_to_copy));
|
||||
} else {
|
||||
if (auto result = fs().read_block(block_index, &buffer_offset, num_bytes_to_copy, offset_into_block, allow_cache); result.is_error()) {
|
||||
dmesgln("Ext2FSInode[{}]::read_bytes(): Failed to read block {} (index {})", identifier(), block_index.value(), bi);
|
||||
|
@ -982,8 +980,7 @@ KResultOr<size_t> Ext2FSInode::write_bytes(off_t offset, size_t count, const Use
|
|||
VERIFY(offset == 0);
|
||||
if (max((size_t)(offset + count), (size_t)m_raw_inode.i_size) < max_inline_symlink_length) {
|
||||
dbgln_if(EXT2_DEBUG, "Ext2FSInode[{}]::write_bytes(): Poking into i_block array for inline symlink ({} bytes)", identifier(), count);
|
||||
if (!data.read(((u8*)m_raw_inode.i_block) + offset, (size_t)count))
|
||||
return EFAULT;
|
||||
TRY(data.read(((u8*)m_raw_inode.i_block) + offset, count));
|
||||
if ((size_t)(offset + count) > (size_t)m_raw_inode.i_size)
|
||||
m_raw_inode.i_size = offset + count;
|
||||
set_metadata_dirty(true);
|
||||
|
|
|
@ -222,8 +222,9 @@ KResultOr<size_t> FileDescription::get_dir_entries(UserOrKernelBuffer& output_bu
|
|||
if (remaining < stream.size()) {
|
||||
error = EINVAL;
|
||||
return false;
|
||||
} else if (!output_buffer.write(stream.bytes())) {
|
||||
error = EFAULT;
|
||||
}
|
||||
if (auto result = output_buffer.write(stream.bytes()); result.is_error()) {
|
||||
error = result.release_error();
|
||||
return false;
|
||||
}
|
||||
output_buffer = output_buffer.offset(stream.size());
|
||||
|
|
|
@ -446,10 +446,7 @@ KResultOr<size_t> ISO9660Inode::read_bytes(off_t offset, size_t size, UserOrKern
|
|||
return EIO;
|
||||
}
|
||||
|
||||
bool result = buffer_offset.write(block->data() + initial_offset, bytes_to_read);
|
||||
if (!result) {
|
||||
return EFAULT;
|
||||
}
|
||||
TRY(buffer_offset.write(block->data() + initial_offset, bytes_to_read));
|
||||
|
||||
nread += bytes_to_read;
|
||||
initial_offset = 0;
|
||||
|
|
|
@ -745,9 +745,7 @@ KResultOr<size_t> Plan9FSInode::read_bytes(off_t offset, size_t size, UserOrKern
|
|||
|
||||
// Guard against the server returning more data than requested.
|
||||
size_t nread = min(data.length(), size);
|
||||
if (!buffer.write(data.characters_without_null_termination(), nread))
|
||||
return EFAULT;
|
||||
|
||||
TRY(buffer.write(data.characters_without_null_termination(), nread));
|
||||
return nread;
|
||||
}
|
||||
|
||||
|
|
|
@ -489,8 +489,7 @@ KResultOr<size_t> ProcFSProcessPropertyInode::read_bytes(off_t offset, size_t co
|
|||
if (!data_buffer)
|
||||
return KResult(EFAULT);
|
||||
ssize_t nread = min(static_cast<off_t>(data_buffer->size() - offset), static_cast<off_t>(count));
|
||||
if (!buffer.write(data_buffer->data() + offset, nread))
|
||||
return KResult(EFAULT);
|
||||
TRY(buffer.write(data_buffer->data() + offset, nread));
|
||||
return nread;
|
||||
}
|
||||
if (!description->data()) {
|
||||
|
@ -507,8 +506,7 @@ KResultOr<size_t> ProcFSProcessPropertyInode::read_bytes(off_t offset, size_t co
|
|||
return 0;
|
||||
|
||||
ssize_t nread = min(static_cast<off_t>(data_buffer->size() - offset), static_cast<off_t>(count));
|
||||
if (!buffer.write(data_buffer->data() + offset, nread))
|
||||
return KResult(EFAULT);
|
||||
TRY(buffer.write(data_buffer->data() + offset, nread));
|
||||
|
||||
return nread;
|
||||
}
|
||||
|
|
|
@ -138,8 +138,7 @@ KResultOr<size_t> TmpFSInode::read_bytes(off_t offset, size_t size, UserOrKernel
|
|||
if (static_cast<off_t>(size) > m_metadata.size - offset)
|
||||
size = m_metadata.size - offset;
|
||||
|
||||
if (!buffer.write(m_content->data() + offset, size))
|
||||
return EFAULT;
|
||||
TRY(buffer.write(m_content->data() + offset, size));
|
||||
return size;
|
||||
}
|
||||
|
||||
|
@ -182,8 +181,7 @@ KResultOr<size_t> TmpFSInode::write_bytes(off_t offset, size_t size, const UserO
|
|||
notify_watchers();
|
||||
}
|
||||
|
||||
if (!buffer.read(m_content->data() + offset, size)) // TODO: partial reads?
|
||||
return EFAULT;
|
||||
TRY(buffer.read(m_content->data() + offset, size)); // TODO: partial reads?
|
||||
|
||||
did_modify_contents();
|
||||
return size;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue