From 114ec3c1f71b40bd4bba473b0187e7c664ed1755 Mon Sep 17 00:00:00 2001 From: Hirotaka Tagawa / wafuwafu13 Date: Wed, 24 May 2023 20:18:13 +0100 Subject: feat(ext/fs): add isBlockDevice, isCharDevice, isFifo, isSocket to FileInfo (#19008) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `isFile`, `isDirectory`, `isSymlink` are defined in `Deno.FileInfo`, but `isBlockDevice`, `isCharacterDevice`, `isFIFO`, `isSocket` are not defined. --------- Co-authored-by: Bartek IwaƄczuk --- ext/io/fs.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'ext/io') 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) -> Option { 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), } } } -- cgit v1.2.3