summaryrefslogtreecommitdiff
path: root/ext/io/fs.rs
diff options
context:
space:
mode:
authorHirotaka Tagawa / wafuwafu13 <jaruwafu@gmail.com>2023-05-24 20:18:13 +0100
committerGitHub <noreply@github.com>2023-05-24 21:18:13 +0200
commit114ec3c1f71b40bd4bba473b0187e7c664ed1755 (patch)
tree7633e26d36133acf29b81de02418f7c7cfd2a847 /ext/io/fs.rs
parent072e2b2fa236dd50040a210a425ff50ae39b0198 (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.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),
}
}
}