From 77005950f09d2f9ba54962bf5adc3f2bc3a7213f Mon Sep 17 00:00:00 2001 From: Arthur Carcano Date: Fri, 25 Nov 2022 17:47:00 +0100 Subject: [PATCH] Implement masking in FileType comparison on Unix Fixes: https://github.com/rust-lang/rust/issues/104900 --- library/std/src/sys/unix/fs.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/library/std/src/sys/unix/fs.rs b/library/std/src/sys/unix/fs.rs index 37a49f2d78a..382204d6893 100644 --- a/library/std/src/sys/unix/fs.rs +++ b/library/std/src/sys/unix/fs.rs @@ -332,11 +332,16 @@ pub struct FileTimes { modified: Option, } -#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)] +#[derive(Copy, Clone, Eq, Hash, Debug)] pub struct FileType { mode: mode_t, } +impl PartialEq for FileType { + fn eq(&self, other: &Self) -> bool { + self.masked() == other.masked() + } +} #[derive(Debug)] pub struct DirBuilder { mode: mode_t, @@ -550,6 +555,10 @@ impl FileType { pub fn is(&self, mode: mode_t) -> bool { self.mode & libc::S_IFMT == mode } + + fn masked(&self) -> mode_t { + self.mode & libc::S_IFMT + } } impl FromInner for FilePermissions {