summaryrefslogtreecommitdiff
path: root/src/poll.rs
diff options
context:
space:
mode:
authorZhouyu Qian <qzy@qzy.io>2018-04-19 18:02:30 -0700
committerZhouyu Qian <qzy@qzy.io>2018-04-19 19:38:20 -0700
commit5e2b582662b1c0ab28460629a846e9fe693120c5 (patch)
tree334fb41dcf1b8190cf46c8fb0565deda9c4c0ec2 /src/poll.rs
parent305141c6dede2ebb5e7b4c5d4c1bc547f52f3d48 (diff)
downloadnix-5e2b582662b1c0ab28460629a846e9fe693120c5.zip
Implement Debug trait for PollFd
This is useful when using printf-style debugging to observe the variables of the program. Also includes a test. Fixes #885.
Diffstat (limited to 'src/poll.rs')
-rw-r--r--src/poll.rs19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/poll.rs b/src/poll.rs
index f3046ff3..eb6b2417 100644
--- a/src/poll.rs
+++ b/src/poll.rs
@@ -4,6 +4,7 @@ use sys::time::TimeSpec;
#[cfg(any(target_os = "android", target_os = "dragonfly", target_os = "freebsd", target_os = "linux"))]
use sys::signal::SigSet;
use std::os::unix::io::RawFd;
+use std::fmt;
use libc;
use Result;
@@ -19,7 +20,6 @@ use errno::Errno;
/// retrieved by calling [`revents()`](#method.revents) on the `PollFd`.
#[repr(C)]
#[derive(Clone, Copy)]
-#[allow(missing_debug_implementations)]
pub struct PollFd {
pollfd: libc::pollfd,
}
@@ -43,6 +43,23 @@ impl PollFd {
}
}
+impl fmt::Debug for PollFd {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ let pfd = self.pollfd;
+ let mut ds = f.debug_struct("PollFd");
+ ds.field("fd", &pfd.fd);
+ match EventFlags::from_bits(pfd.events) {
+ None => ds.field("events", &pfd.events),
+ Some(ef) => ds.field("events", &ef),
+ };
+ match EventFlags::from_bits(pfd.revents) {
+ None => ds.field("revents", &pfd.revents),
+ Some(ef) => ds.field("revents", &ef),
+ };
+ ds.finish()
+ }
+}
+
libc_bitflags! {
/// These flags define the different events that can be monitored by `poll` and `ppoll`
pub struct EventFlags: libc::c_short {