diff options
author | Hirotaka Tagawa / wafuwafu13 <jaruwafu@gmail.com> | 2023-05-24 20:18:13 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-24 21:18:13 +0200 |
commit | 114ec3c1f71b40bd4bba473b0187e7c664ed1755 (patch) | |
tree | 7633e26d36133acf29b81de02418f7c7cfd2a847 /ext/io/fs.rs | |
parent | 072e2b2fa236dd50040a210a425ff50ae39b0198 (diff) |
feat(ext/fs): add isBlockDevice, isCharDevice, isFifo, isSocket to FileInfo (#19008)
`isFile`, `isDirectory`, `isSymlink` are defined in `Deno.FileInfo`, but
`isBlockDevice`, `isCharacterDevice`, `isFIFO`, `isSocket` are not
defined.
---------
Co-authored-by: Bartek IwaĆczuk <biwanczuk@gmail.com>
Diffstat (limited to 'ext/io/fs.rs')
-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), } } } |