Skip to content

Commit

Permalink
Fix #411 - Provide accessors for 'events' in PollFd
Browse files Browse the repository at this point in the history
Test: `cargo test --test test test_pollfd_events`
  • Loading branch information
cemeyer committed Sep 8, 2021
1 parent ccc1434 commit 3323a8a
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 1 deletion.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ This project adheres to [Semantic Versioning](https://semver.org/).
(#[1514](https://github.com/nix-rust/nix/pull/1514))
- Added `AsRawFd` implementation on `PollFd`.
(#[1516](https://github.com/nix-rust/nix/pull/1516))
- Added read/write accessors for 'events' on `PollFd`.
(#[1517](https://github.com/nix-rust/nix/pull/1517))

### Changed

Expand Down
13 changes: 12 additions & 1 deletion src/poll.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,21 @@ impl PollFd {
}
}

/// Returns the events that occured in the last call to `poll` or `ppoll`.
/// Returns the events that occured in the last call to `poll` or `ppoll`. Will only return
/// `None` if the kernel provides status flags that Nix does not know about.
pub fn revents(self) -> Option<PollFlags> {
PollFlags::from_bits(self.pollfd.revents)
}

/// The events of interest for this `PollFd`.
pub fn events(self) -> PollFlags {
PollFlags::from_bits(self.pollfd.events).unwrap()
}

/// Modify the events of interest for this `PollFd`.
pub fn set_events(&mut self, events: PollFlags) {
self.pollfd.events = events.bits();
}
}

impl AsRawFd for PollFd {
Expand Down
8 changes: 8 additions & 0 deletions test/test_poll.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,3 +72,11 @@ fn test_pollfd_fd() {
let pfd = PollFd::new(0x1234, PollFlags::empty());
assert_eq!(pfd.as_raw_fd(), 0x1234);
}

#[test]
fn test_pollfd_events() {
let mut pfd = PollFd::new(-1, PollFlags::POLLIN);
assert_eq!(pfd.events(), PollFlags::POLLIN);
pfd.set_events(PollFlags::POLLOUT);
assert_eq!(pfd.events(), PollFlags::POLLOUT);
}

0 comments on commit 3323a8a

Please sign in to comment.