1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 12:48:10 +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:
Andreas Kling 2020-09-19 15:37:39 +02:00
parent c0e4353bde
commit 55dd13ccac

View file

@ -65,17 +65,20 @@ KResultOr<size_t> InodeWatcher::read(FileDescription&, size_t, UserOrKernelBuffe
if (!m_inode)
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();
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;
});
if (nwritten < 0)
return KResult(nwritten);
ASSERT((size_t)nwritten == sizeof(event));
return sizeof(event);
return bytes_to_write;
}
KResultOr<size_t> InodeWatcher::write(FileDescription&, size_t, const UserOrKernelBuffer&, size_t)