diff --git a/Userland/Libraries/LibCore/DirIterator.cpp b/Userland/Libraries/LibCore/DirIterator.cpp index 84fe5a57770719320edcc0357ac5ba2f4a9e3e14..7e4acb839881a79d668946ee1f5684037c857234 100644 --- a/Userland/Libraries/LibCore/DirIterator.cpp +++ b/Userland/Libraries/LibCore/DirIterator.cpp @@ -82,7 +82,9 @@ bool DirIterator::advance_next() if constexpr (dirent_has_d_type) { // dirent structures from readdir aren't guaranteed to contain valid file types, // as it is possible that the underlying filesystem doesn't keep track of those. - if (m_next->type == DirectoryEntry::Type::Unknown) { + // However, if we were requested to not do stat on the entries of this directory, + // the calling code will be given the raw unknown type. + if ((m_flags & Flags::NoStat) == 0 && m_next->type == DirectoryEntry::Type::Unknown) { struct stat statbuf; if (fstatat(dirfd(m_dir), de->d_name, &statbuf, AT_SYMLINK_NOFOLLOW) < 0) { m_error = Error::from_errno(errno); diff --git a/Userland/Libraries/LibCore/DirIterator.h b/Userland/Libraries/LibCore/DirIterator.h index bf9561e359bafa6f272aea0004bf15eb6477e40c..70c5fd41d4bdf1cea23d4f8e29c79cefa5f4d41b 100644 --- a/Userland/Libraries/LibCore/DirIterator.h +++ b/Userland/Libraries/LibCore/DirIterator.h @@ -20,6 +20,7 @@ public: NoFlags = 0x0, SkipDots = 0x1, SkipParentAndBaseDir = 0x2, + NoStat = 0x4, }; explicit DirIterator(ByteString path, Flags = Flags::NoFlags);