diff --git a/Kernel/FileSystem/FileDescription.cpp b/Kernel/FileSystem/FileDescription.cpp index defb5e6338..f68112d770 100644 --- a/Kernel/FileSystem/FileDescription.cpp +++ b/Kernel/FileSystem/FileDescription.cpp @@ -34,6 +34,7 @@ FileDescription::FileDescription(File& file) m_inode = static_cast(file).inode(); if (is_socket()) socket()->attach(*this); + m_is_directory = metadata().is_directory(); } FileDescription::~FileDescription() @@ -138,19 +139,15 @@ ByteBuffer FileDescription::read_entire_file() return m_inode->read_entire(this); } -bool FileDescription::is_directory() const -{ - ASSERT(!is_fifo()); - return metadata().is_directory(); -} ssize_t FileDescription::get_dir_entries(u8* buffer, ssize_t size) { + if (!is_directory()) + return -ENOTDIR; + auto metadata = this->metadata(); if (!metadata.is_valid()) return -EIO; - if (!metadata.is_directory()) - return -ENOTDIR; int size_to_allocate = max(PAGE_SIZE, metadata.size); diff --git a/Kernel/FileSystem/FileDescription.h b/Kernel/FileSystem/FileDescription.h index 62dcb91b7f..dc2fedd26c 100644 --- a/Kernel/FileSystem/FileDescription.h +++ b/Kernel/FileSystem/FileDescription.h @@ -44,7 +44,7 @@ public: String absolute_path() const; - bool is_directory() const; + bool is_directory() const { return m_is_directory; } File& file() { return *m_file; } const File& file() const { return *m_file; } @@ -115,6 +115,7 @@ private: u32 m_file_flags { 0 }; bool m_is_blocking { true }; + bool m_is_directory { false }; bool m_should_append { false }; FIFO::Direction m_fifo_direction { FIFO::Direction::Neither }; };