MCPcopy Create free account
hub / github.com/emberian/evdev / fill_events

Method fill_events

src/uinput.rs:376–392  ·  view source on GitHub ↗

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)

Source from the content-addressed store, hash-verified

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.

Callers 3

fetch_eventsMethod · 0.45
poll_eventMethod · 0.45
fetch_events_innerMethod · 0.45

Calls 2

lenMethod · 0.80
as_raw_fdMethod · 0.45

Tested by

no test coverage detected