Read a maximum of `num` events into the internal buffer. If the underlying fd is not O_NONBLOCK, this will block. Returns the number of events that were read, or an error.
(&mut self)
| 374 | /// |
| 375 | /// Returns the number of events that were read, or an error. |
| 376 | pub(crate) fn fill_events(&mut self) -> io::Result<usize> { |
| 377 | let fd = self.fd.as_raw_fd(); |
| 378 | self.event_buf.reserve(crate::EVENT_BATCH_SIZE); |
| 379 | |
| 380 | let spare_capacity = self.event_buf.spare_capacity_mut(); |
| 381 | let spare_capacity_size = std::mem::size_of_val(spare_capacity); |
| 382 | |
| 383 | // use libc::read instead of nix::unistd::read b/c we need to pass an uninitialized buf |
| 384 | let res = unsafe { libc::read(fd, spare_capacity.as_mut_ptr() as _, spare_capacity_size) }; |
| 385 | let bytes_read = nix::errno::Errno::result(res)?; |
| 386 | let num_read = bytes_read as usize / std::mem::size_of::<input_event>(); |
| 387 | unsafe { |
| 388 | let len = self.event_buf.len(); |
| 389 | self.event_buf.set_len(len + num_read); |
| 390 | } |
| 391 | Ok(num_read) |
| 392 | } |
| 393 | |
| 394 | /// Fetches and returns events from the kernel ring buffer without doing synchronization on |
| 395 | /// SYN_DROPPED. |
no test coverage detected