mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 00:07:43 +00:00
Kernel: Don't assert when reading too little from an InodeWatcher
If you provide a buffer that's too small, we'll still dequeue an event and write whatever fits in the provided buffer.
This commit is contained in:
parent
c0e4353bde
commit
55dd13ccac
1 changed files with 9 additions and 6 deletions
|
@ -65,17 +65,20 @@ KResultOr<size_t> InodeWatcher::read(FileDescription&, size_t, UserOrKernelBuffe
|
||||||
if (!m_inode)
|
if (!m_inode)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
// FIXME: What should we do if the output buffer is too small?
|
|
||||||
ASSERT(buffer_size >= (int)sizeof(Event));
|
|
||||||
auto event = m_queue.dequeue();
|
auto event = m_queue.dequeue();
|
||||||
ssize_t nwritten = buffer.write_buffered<sizeof(event)>(sizeof(event), [&](u8* data, size_t data_bytes) {
|
|
||||||
memcpy(data, &event, sizeof(event));
|
if (buffer_size < sizeof(Event))
|
||||||
|
return buffer_size;
|
||||||
|
|
||||||
|
size_t bytes_to_write = min(buffer_size, sizeof(event));
|
||||||
|
|
||||||
|
ssize_t nwritten = buffer.write_buffered<sizeof(event)>(bytes_to_write, [&](u8* data, size_t data_bytes) {
|
||||||
|
memcpy(data, &event, bytes_to_write);
|
||||||
return (ssize_t)data_bytes;
|
return (ssize_t)data_bytes;
|
||||||
});
|
});
|
||||||
if (nwritten < 0)
|
if (nwritten < 0)
|
||||||
return KResult(nwritten);
|
return KResult(nwritten);
|
||||||
ASSERT((size_t)nwritten == sizeof(event));
|
return bytes_to_write;
|
||||||
return sizeof(event);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
KResultOr<size_t> InodeWatcher::write(FileDescription&, size_t, const UserOrKernelBuffer&, size_t)
|
KResultOr<size_t> InodeWatcher::write(FileDescription&, size_t, const UserOrKernelBuffer&, size_t)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue