diff options
Diffstat (limited to 'ext/io')
-rw-r--r-- | ext/io/fs.rs | 22 |
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), } } } |