LibCore: Add new flag for DirIterator to not use fstatat
This will be useful in the upcoming listdir utility (in the next commit) to get the file type which is obtained in the get_dir_entries syscall, so it's not changed later by the fstatat syscall. This will ensure that we get the raw file type value as it's represented by directory entries from the get_dir_entries syscall.
This commit is contained in:
parent
d568b09632
commit
603516e8c0
Notes:
sideshowbarker
2024-07-18 05:01:22 +09:00
Author: https://github.com/supercomputer7 Commit: https://github.com/SerenityOS/serenity/commit/603516e8c0 Pull-request: https://github.com/SerenityOS/serenity/pull/22598 Reviewed-by: https://github.com/ADKaster ✅
2 changed files with 4 additions and 1 deletions
|
@ -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);
|
||||
|
|
|
@ -20,6 +20,7 @@ public:
|
|||
NoFlags = 0x0,
|
||||
SkipDots = 0x1,
|
||||
SkipParentAndBaseDir = 0x2,
|
||||
NoStat = 0x4,
|
||||
};
|
||||
|
||||
explicit DirIterator(ByteString path, Flags = Flags::NoFlags);
|
||||
|
|
Loading…
Add table
Reference in a new issue