summaryrefslogtreecommitdiff
path: root/ext/io
diff options
context:
space:
mode:
Diffstat (limited to 'ext/io')
-rw-r--r--ext/io/fs.rs22
1 files changed, 22 insertions, 0 deletions
diff --git a/ext/io/fs.rs b/ext/io/fs.rs
index e335324f5..9afa192ab 100644
--- a/ext/io/fs.rs
+++ b/ext/io/fs.rs
@@ -89,6 +89,10 @@ pub struct FsStat {
pub rdev: u64,
pub blksize: u64,
pub blocks: u64,
+ pub is_block_device: bool,
+ pub is_char_device: bool,
+ pub is_fifo: bool,
+ pub is_socket: bool,
}
impl FsStat {
@@ -107,6 +111,20 @@ impl FsStat {
}};
}
+ macro_rules! unix_or_false {
+ ($member:ident) => {{
+ #[cfg(unix)]
+ {
+ use std::os::unix::fs::FileTypeExt;
+ metadata.file_type().$member()
+ }
+ #[cfg(not(unix))]
+ {
+ false
+ }
+ }};
+ }
+
#[inline(always)]
fn to_msec(maybe_time: Result<SystemTime, io::Error>) -> Option<u64> {
match maybe_time {
@@ -139,6 +157,10 @@ impl FsStat {
rdev: unix_or_zero!(rdev),
blksize: unix_or_zero!(blksize),
blocks: unix_or_zero!(blocks),
+ is_block_device: unix_or_false!(is_block_device),
+ is_char_device: unix_or_false!(is_char_device),
+ is_fifo: unix_or_false!(is_fifo),
+ is_socket: unix_or_false!(is_socket),
}
}
}