diff --git a/Kernel/FileSystem/Ext2FileSystem.cpp b/Kernel/FileSystem/Ext2FileSystem.cpp index 9f547bb85b4..e18e8049c74 100644 --- a/Kernel/FileSystem/Ext2FileSystem.cpp +++ b/Kernel/FileSystem/Ext2FileSystem.cpp @@ -855,6 +855,28 @@ ssize_t Ext2FSInode::write_bytes(off_t offset, ssize_t count, const u8* data, Fi return nwritten; } +u8 Ext2FSInode::file_type_for_directory_entry(const ext2_dir_entry_2& entry) +{ + switch (entry.file_type) { + case EXT2_FT_REG_FILE: + return DT_REG; + case EXT2_FT_DIR: + return DT_DIR; + case EXT2_FT_CHRDEV: + return DT_CHR; + case EXT2_FT_BLKDEV: + return DT_BLK; + case EXT2_FT_FIFO: + return DT_FIFO; + case EXT2_FT_SOCK: + return EXT2_FT_SOCK; + case EXT2_FT_SYMLINK: + return DT_LNK; + default: + return DT_UNKNOWN; + } +} + KResult Ext2FSInode::traverse_as_directory(Function callback) const { LOCKER(m_lock); @@ -877,7 +899,7 @@ KResult Ext2FSInode::traverse_as_directory(Functioninode << ", name_len: " << entry->name_len << ", rec_len: " << entry->rec_len << ", file_type: " << entry->file_type << ", name: " << String(entry->name, entry->name_len); #endif - if (!callback({ { entry->name, entry->name_len }, { fsid(), entry->inode }, entry->file_type })) + if (!callback({ { entry->name, entry->name_len }, { fsid(), entry->inode }, file_type_for_directory_entry(*entry) })) break; } entry = (ext2_dir_entry_2*)((char*)entry + entry->rec_len); diff --git a/Kernel/FileSystem/Ext2FileSystem.h b/Kernel/FileSystem/Ext2FileSystem.h index 3de90296767..dee084813aa 100644 --- a/Kernel/FileSystem/Ext2FileSystem.h +++ b/Kernel/FileSystem/Ext2FileSystem.h @@ -81,6 +81,8 @@ private: void populate_lookup_cache() const; KResult resize(u64); + static u8 file_type_for_directory_entry(const ext2_dir_entry_2&); + Ext2FS& fs(); const Ext2FS& fs() const; Ext2FSInode(Ext2FS&, unsigned index); diff --git a/Kernel/UnixTypes.h b/Kernel/UnixTypes.h index 9c2b568076e..77467a1e534 100644 --- a/Kernel/UnixTypes.h +++ b/Kernel/UnixTypes.h @@ -614,3 +614,25 @@ struct rtentry { #define PT_PEEK 7 #define PT_POKE 8 #define PT_SETREGS 9 + +// Used in struct dirent +enum { + DT_UNKNOWN = 0, +#define DT_UNKNOWN DT_UNKNOWN + DT_FIFO = 1, +#define DT_FIFO DT_FIFO + DT_CHR = 2, +#define DT_CHR DT_CHR + DT_DIR = 4, +#define DT_DIR DT_DIR + DT_BLK = 6, +#define DT_BLK DT_BLK + DT_REG = 8, +#define DT_REG DT_REG + DT_LNK = 10, +#define DT_LNK DT_LNK + DT_SOCK = 12, +#define DT_SOCK DT_SOCK + DT_WHT = 14 +#define DT_WHT DT_WHT +};