|
The Pedigree Project 0.1
|
#include <Ext2Directory.h>
Inheritance diagram for Ext2Directory:
Collaboration diagram for Ext2Directory:Classes | |
| struct | ParsedEntry |
| struct | RenameRecord |
Public Member Functions | |
| Ext2Directory (const String &name, uintptr_t inode_num, Inode *inode, class Ext2Filesystem *pFs, File *pParent) | |
| ~Ext2Directory () override | |
| void | truncate () override |
| bool | sync () override |
| virtual bool | addEntry (const String &filename, File *pFile, size_t type) |
| virtual bool | removeEntry (const String &filename, Ext2Node *pFile) |
| void | fileAttributeChanged () override |
| Attributes | getAttributes () const override |
| XattrStatus | getExtendedAttribute (const StringView &, void *, size_t, size_t &) override |
| XattrStatus | listExtendedAttributes (void *, size_t, size_t &) override |
| XattrStatus | setExtendedAttribute (const StringView &, const void *, size_t, unsigned) override |
| XattrStatus | removeExtendedAttribute (const StringView &) override |
Public Member Functions inherited from Directory | |
| Directory () | |
| Directory (const String &name, Time::Timestamp accessedTime, Time::Timestamp modifiedTime, Time::Timestamp creationTime, uintptr_t inode, class Filesystem *pFs, size_t size, File *pParent) | |
| virtual | ~Directory () |
| virtual bool | isDirectory () |
| File * | getChild (size_t n) |
| bool | isDetached () const |
| size_t | getNumChildren () |
| ReadStatus | enumerate (uint64_t &cookie, DirectoryEntryEmitter emitter, void *context) |
| ReadStatus | isEmpty (bool &empty) |
| virtual void | cacheDirectoryContents () |
| virtual bool | isCachePopulated () const |
| File * | lookup (const HashedStringView &s) const |
| MUST_USE_RESULT bool | lookupRetained (const HashedStringView &s, ChildLease &child) const |
| MUST_USE_RESULT LookupStatus | lookupChild (const HashedStringView &s, ChildLease &child) const |
| MUST_USE_RESULT LookupStatus | lookupChildAt (uint64_t cookie, const HashedStringView &name, ChildLease &child) const |
| void | remove (const HashedStringView &s) |
| Directory * | getReparsePoint () const |
| Get the reparse point attached to this directory. Reparse points allow locations on the filesystem to redirect lookups to a separate directory. While the reparse point is active, the target directory is used for lookups instead of this one. The returned pointer is borrowed; atomic publication does not pin the target directory's lifetime. | |
| void | setReparsePoint (Directory *pTarget) |
| AddStatus | addEphemeralFile (File *pFile) |
| Add an ephemeral file to the directory. | |
| void | removeEphemeralFiles () |
| bool | empty () |
| void | emptyCache () |
Public Member Functions inherited from File | |
| File () | |
| File (const String &name, Time::Timestamp accessedTime, Time::Timestamp modifiedTime, Time::Timestamp creationTime, uintptr_t inode, class Filesystem *pFs, size_t size, File *pParent) | |
| virtual | ~File () |
| virtual uint64_t | read (uint64_t location, uint64_t size, uintptr_t buffer, bool bCanBlock=true) final |
| size_t | readCached (uint64_t location, size_t size, uintptr_t buffer, bool(*prepare)(uintptr_t, size_t)=nullptr) |
| virtual uint64_t | write (uint64_t location, uint64_t size, uintptr_t buffer, bool bCanBlock=true) final |
| uint64_t | append (uint64_t size, uintptr_t buffer, uint64_t &location, bool bCanBlock=true) |
| WriteGuard | lockWrites () |
| virtual physical_uintptr_t | getPhysicalPage (size_t offset) |
| virtual bool | isDirectPhysicalMapping () const |
| size_t | physicalMappingFlags () const |
| virtual void | returnPhysicalPage (size_t offset) |
| virtual bool | tryBeginMappingRelease () |
| void | endMappingRelease () |
| bool | syncAndReturnPhysicalPage (size_t offset, bool async) |
| bool | syncRange (size_t offset, size_t length) |
| virtual bool | sync (size_t offset, bool async) |
| virtual bool | syncPages (const uint64_t *offsets, size_t count) |
| Time::Timestamp | getCreationTime () |
| void | setCreationTime (Time::Timestamp t) |
| Time::Timestamp | getAccessedTime () |
| void | setAccessedTime (Time::Timestamp t) |
| Time::Timestamp | getModifiedTime () |
| void | setModifiedTime (Time::Timestamp t) |
| void | setTimes (Time::Timestamp accessed, Time::Timestamp modified, bool changeAccessed, bool changeModified) |
| virtual bool | prepareSharedMapping (size_t offset, size_t length) |
| String | getName () const |
| void | getName (String &s) const |
| virtual void | getFullPath (String &result, bool bWithMount=true) |
| virtual String | getFullPath (bool bWithMount=true) |
| bool | resize (size_t size) |
| virtual size_t | getSize () |
| void | setSize (size_t sz) |
| virtual bool | isSymlink () |
| virtual bool | isBlockDevice () const |
| virtual uint64_t | deviceNumber () const |
| virtual bool | isPipe () const |
| virtual bool | isFifo () const |
| virtual bool | isSocket () const |
| virtual bool | isSeekable () const |
| bool | supportsRegularFileOperations () |
| virtual bool | isCharacterDevice () const |
| virtual bool | isConsole () const |
| virtual uint64_t | maximumFileSize () const |
| virtual bool | allowMapping (bool shared, bool writeRequested, bool &mayWrite) |
| bool | acquireMappingUse (bool executable, bool sharedWrite) |
| void | releaseMappingUse (bool executable, bool sharedWrite) |
| uintptr_t | getInode () const |
| virtual void | setInode (uintptr_t inode) |
| virtual uintptr_t | futexIdentity () |
| Filesystem * | getFilesystem () const |
| void | setFilesystem (Filesystem *pFs) |
| void | publishEvent (FileEventMask mask, const StringView &name=StringView(), bool targetIsDirectory=false) |
| virtual FileHandleStatus | subscribeInodeEvents (FileEventMask mask, const SharedPointer< FileEventObserver > &observer, FileEventSubscription &subscription) |
| virtual void | finishInodeRetirement () |
| virtual void | increaseRefCount (bool bIsWriter) |
| virtual void | decreaseRefCount (bool bIsWriter) |
| virtual bool | retainVfsReference () |
| virtual void | releaseVfsReference () |
| virtual bool | isStableVfsRoot () const |
| void | setPermissions (uint32_t perms) |
| uint32_t | getPermissions () const |
| bool | setOwnership (size_t uid, size_t gid, bool changeUid, bool changeGid) |
| void | setUid (size_t uid) |
| size_t | getUid () const |
| void | setGid (size_t gid) |
| size_t | getGid () const |
| File * | getParent () const |
| void | getNamespace (ParentLease &parent, String &name) const |
| virtual int | select (bool bWriting=false, int timeout=0) |
| virtual ReadyMask | queryReady (bool reading, bool writing) |
| virtual bool | supportsReadinessNotifications () const |
| void | monitor (Thread *pThread, Event *pEvent) |
| void | cullMonitorTargets (Thread *pThread) |
| void | cullMonitorTargets (Event *pEvent) |
| virtual bool | supports (const size_t command) const |
| virtual int | command (const size_t command, void *buffer) |
| virtual size_t | getBlockSize () const |
| void | markPageExternallyWritable (size_t offset) |
| size_t | populateRange (size_t offset, size_t length) |
| void | enableDirect () |
| void | disableDirect () |
| virtual void | preallocate (size_t expectedSize, bool zero=true) |
| bool | allocateRange (size_t offset, size_t length, bool keepSize=false) |
| virtual File * | open () |
| virtual File * | openForDescriptor (RetainedFile &owner) |
Public Member Functions inherited from ReadinessSource | |
| MUST_USE_RESULT bool | subscribeReadiness (ReadyMask interest, const SharedPointer< ReadinessObserver > &observer, ReadinessSubscription &subscription) |
| virtual ReadinessGenerations | readinessGenerations () |
Public Member Functions inherited from FileEventSource | |
| MUST_USE_RESULT bool | subscribeFileEvents (FileEventMask interest, const SharedPointer< FileEventObserver > &observer, FileEventSubscription &subscription) |
Public Member Functions inherited from Ext2Node | |
| Ext2Node (uintptr_t inode_num, Inode *pInode, class Ext2Filesystem *pFs) | |
| virtual | ~Ext2Node () |
| Inode * | getInode () |
| uint32_t | getInodeNumber () |
| void | fileAttributeChanged (size_t size, size_t atime, size_t mtime, size_t ctime) |
| File::Attributes | inodeAttributes () const |
| void | updateInodeAttributes (const File::Attributes &attributes, uint32_t mask) |
| bool | changeInodeOwnership (size_t uid, size_t gid, bool changeUid, bool changeGid) |
| bool | wipe (bool allocationLockHeld=false) |
| void | extend (size_t newSize) |
| void | extend (size_t newSize, uint64_t location, uint64_t size) |
| uint64_t | maximumFileSize () const |
| bool | isInlineSymlink () const |
| void | updateAllocatedSectorCount () |
| XattrStatus | getXattr (const StringView &, void *, size_t, size_t &) |
| XattrStatus | listXattrs (void *, size_t, size_t &) |
| XattrStatus | setXattr (const StringView &, const void *, size_t, unsigned) |
| XattrStatus | removeXattr (const StringView &) |
| uintptr_t | readBlock (uint64_t location) |
| void | writeBlock (uint64_t location) |
| void | trackBlock (uint32_t block, bool writeInode=true) |
| bool | pinBlock (uint64_t location) |
| void | unpinBlock (uint64_t location) |
| bool | sync (size_t offset, bool async) |
Protected Member Functions | |
| void | updateAttributes (const Attributes &attributes, uint32_t mask) override |
| bool | changeOwnership (size_t uid, size_t gid, bool changeUid, bool changeGid) override |
Protected Member Functions inherited from Directory | |
| virtual bool | cacheResolvedChildren () const |
| virtual const DirectoryEntryCache & | getCache () |
| void | markCachePopulated () |
| bool | addDirectoryEntry (const String &name, File *pTarget) |
| bool | addDirectoryEntry (const String &name, DirectoryEntryMetadata &&meta) |
| bool | reserveDirectoryEntry (const HashedStringView &name, NameReservation &reservation) |
| bool | addCachedDirectoryEntry (NameReservation &reservation, File *pTarget) |
| void | invalidateDirectoryEntry (const HashedStringView &name) |
| bool | removeDirectoryEntry (const HashedStringView &name, File *expected) |
| Mutex & | namespaceMutationLock () |
| void | markDetached () |
| void | preallocateDirectoryEntries (size_t count) |
| virtual File * | convertToFile (const DirectoryEntryMetadata &meta) |
Protected Member Functions inherited from File | |
| bool | tryAcquireFilesystemOperation (OperationBarrier::Lease &operation) const |
| virtual bool | allowPhysicalPage () const |
| virtual bool | prepareWrite (uint64_t location, uint64_t size) |
| virtual bool | allowResize (size_t oldSize, size_t newSize) |
| virtual bool | prepareShrink (const ShrinkContext &context, UniquePointer< PreparedShrink > &prepared) |
| virtual bool | resizeFile (size_t size) |
| virtual bool | allocateFileRange (size_t offset, size_t length) |
| virtual Mutex & | writeSerializationLock () |
| virtual Mutex & | dataMutationLock () |
| virtual size_t & | physicalPageLoans () |
| bool | clearDataCache () |
| virtual uint64_t | readBytewise (uint64_t location, uint64_t size, uintptr_t buffer, bool bCanBlock=true) |
| virtual uint64_t | writeBytewise (uint64_t location, uint64_t size, uintptr_t buffer, bool bCanBlock=true) |
| virtual uintptr_t | readBlock (uint64_t location) |
| virtual bool | readPage (uint64_t location, uintptr_t destination) |
| virtual bool | readPages (ReadPage *pages, size_t count) |
| virtual void | writeBlock (uint64_t location, uintptr_t addr) |
| virtual void | writeBlocks (uint64_t location, uintptr_t addr, size_t length) |
| virtual void | extend (size_t newSize) |
| virtual void | extend (size_t newSize, uint64_t location, uint64_t size) |
| virtual void | publishInodeEvent (const FileEvent &event) |
| void | dataChanged () |
| void | getFilesystemLabel (HugeStaticString &s) |
| void | enableFillCacheWriteback () |
| void | shutdownFillCacheWriteback () |
| bool | syncFillCache (size_t offset, bool async, bool &present) |
| virtual bool | useFillCache () const |
| virtual MUST_USE_RESULT bool | pinBlock (uint64_t location) |
| virtual MUST_USE_RESULT uintptr_t | acquireCachedBlock (uint64_t location, bool retryChanged) |
| virtual void | unpinBlock (uint64_t location) |
| void | evict (uint64_t location) |
| void | setPermissionsOnly (uint32_t perms) |
| void | setUidOnly (size_t uid) |
| void | setGidOnly (size_t gid) |
| void | retainDetachedParent () |
| void | moveNamespace (const String &name, File *parent) |
| bool | snapshotNamespace (ParentLease &parent, String &name, FileEventMask interest) const |
| virtual CacheState & | cacheState () |
| void | setPhysicalMappingFlags (size_t flags) |
Protected Member Functions inherited from ReadinessSource | |
| void | notifyReadiness (ReadyMask mask) |
| void | closeReadiness (ReadyMask mask=ReadyInvalid|ReadyHangup) |
Protected Member Functions inherited from FileEventSource | |
| bool | hasFileEventObservers (FileEventMask mask) const |
| void | notifyFileEvent (const FileEvent &event) |
| void | notifyFinalFileEvent (const FileEvent &event) |
| void | beginFinalFileEvent (const FileEvent &event) |
| void | drainFileEvents () |
| void | closeFileEvents () |
Protected Member Functions inherited from Ext2Node | |
| XattrStatus | changeXattr (const StringView &, const void *, size_t, unsigned, bool remove) |
| bool | resizeData (size_t size) |
| bool | trimToBlocks (size_t keep, bool allocationLockHeld=false) |
| bool | zeroRange (size_t start, size_t end) |
| bool | collectMappingPages (uint32_t block, unsigned depth, size_t first, size_t span, Vector< MappingPage > &pages) |
| bool | prepareTrim (size_t keep, TrimPlan &plan, bool allocationLockHeld=false) |
| void | commitTrim (TrimPlan &plan, bool allocationLockHeld=false) |
| bool | prepareDataShrink (size_t size, UniquePointer< File::PreparedShrink > &prepared) |
| bool | ensureLargeEnough (size_t size, uint64_t location, uint64_t opsize, bool onlyBlocks=false, bool nozeroblocks=false) |
| bool | addBlock (uint32_t blockValue, Vector< uint32_t > *pendingWrites=0) |
| void | writeBlockOrQueue (uint32_t block, Vector< uint32_t > *pendingWrites) |
| bool | ensureBlockLoaded (size_t nBlock) |
| bool | getBlockNumber (size_t nBlock) |
| bool | getBlockNumberIndirect (uint32_t inode_block, size_t nBlocks, size_t nBlock) |
| bool | getBlockNumberBiindirect (uint32_t inode_block, size_t nBlocks, size_t nBlock) |
| bool | getBlockNumberTriindirect (uint32_t inode_block, size_t nBlocks, size_t nBlock) |
| bool | setBlockNumber (size_t blockNum, uint32_t blockValue, Vector< uint32_t > *pendingWrites=nullptr) |
| bool | ensureWritableRange (size_t location, size_t length) |
| uint32_t | modeToPermissions (uint32_t mode) const |
| uint32_t | permissionsToMode (uint32_t permissions) const |
Private Member Functions | |
| bool | prepareRenameRecord (const String &name, uint32_t inode, RenameRecord &record) |
| bool | prepareRenameSpace (const String &name, RenameRecord &record, const RenameRecord *source) |
| Ext2Directory (const Ext2Directory &file) | |
| Ext2Directory & | operator= (const Ext2Directory &) |
| LookupStatus | resolveChild (const StringView &name, File *&child) override |
| LookupStatus | resolveChildAt (uint64_t cookie, const StringView &name, File *&child) override |
| ReadStatus | readDirectory (uint64_t &cookie, DirectoryEntryEmitter emitter, void *context) override |
| bool | readBytes (uint64_t offset, size_t length, void *buffer) |
| ReadStatus | readEntry (uint64_t offset, ParsedEntry &entry) |
| LookupStatus | resolveEntry (const ParsedEntry &entry, const StringView &name, File *&child) |
| LookupStatus | resolveChildLocked (const StringView &name, File *&child) |
| bool | removeEntryLocked (const String &filename, Ext2Node *pFile) |
| bool | removeFromParent (Ext2Directory *parent, const String &filename) |
| bool | syncDirectoryBlock (uint32_t block) |
| void | queueSyncDependency (uint32_t block) |
Private Attributes | |
| Mutex | m_DirectoryLock |
| bool | m_Removed |
Friends | |
| class | Ext2Filesystem |
Additional Inherited Members | |
Public Types inherited from Directory | |
| enum class | LookupStatus { Found , NotFound , IoError , Retry } |
| enum class | ReadStatus { Complete , Stopped , IoError } |
| enum class | AddStatus { Added , Exists , IoError , Detached } |
| enum class | EntryType : uint8_t { Unknown , Regular , Directory , Symlink , Fifo , Socket , CharacterDevice , BlockDevice } |
| using | DirectoryEntryEmitter = bool(*)(void *, const DirectoryEntryView &) |
Public Types inherited from File | |
| enum | AttributeMask : uint32_t { AccessTime = 1U << 0 , ModifyTime = 1U << 1 , ChangeTime = 1U << 2 , Owner = 1U << 3 , Group = 1U << 4 , Permissions = 1U << 5 } |
Static Public Member Functions inherited from Directory | |
| static Directory * | fromFile (File *pF) |
Static Public Member Functions inherited from Ext2Node | |
| static bool | decodeAllocation (const Inode &, uint32_t blockSize, uint32_t &blocks, bool &inlineSymlink) |
| static bool | encodeAllocation (uint32_t data, uint32_t indirect, bool hasEa, uint32_t blockSize, uint32_t §ors) |
Static Public Attributes inherited from File | |
| static constexpr size_t | MaxReadPages = 32 |
Protected Types inherited from Directory | |
| typedef LazyEvaluate< File, DirectoryEntryMetadata, evaluateEntry, destroyEntry > | DirectoryEntry |
Static Protected Member Functions inherited from File | |
| static bool | writeCallback (CacheConstants::CallbackCause cause, uintptr_t loc, uintptr_t page, void *meta) |
| static bool | fillCacheCallback (CacheConstants::CallbackCause cause, uintptr_t loc, uintptr_t page, void *meta) |
Static Protected Member Functions inherited from FileEventSource | |
| static bool | anyFileEventObservers () |
Protected Attributes inherited from File | |
| String | m_Name |
| Time::Timestamp | m_AccessedTime |
| Time::Timestamp | m_ModifiedTime |
| Time::Timestamp | m_CreationTime |
| uintptr_t | m_Inode |
| uintptr_t | m_FutexIdentity = 0 |
| class Filesystem * | m_pFilesystem |
| size_t | m_Size |
| File * | m_pParent |
| Mutex | m_MetadataLock |
| File * | m_pDetachedParent |
| bool | m_bDetachedParentHandled |
| size_t | m_nWriters |
| size_t | m_nReaders |
| size_t | m_Uid |
| size_t | m_Gid |
| uint32_t | m_Permissions |
| CacheState | m_CacheState |
| bool | m_bDirect |
| Mutex | m_WriteLock |
| Mutex | m_DataMutationLock |
| size_t | m_PhysicalPageLoans = 0 |
| size_t | m_PhysicalMappingFlags = 0 |
| Mutex | m_Lock |
| List< MonitorTarget * > | m_MonitorTargets |
Protected Attributes inherited from Ext2Node | |
| Ext2InodeState * | m_State |
| Inode *& | m_pInode |
| uint32_t | m_InodeNumber |
| class Ext2Filesystem * | m_pExt2Fs |
| Vector< uint32_t > & | m_Blocks |
| uint32_t & | m_nMetadataBlocks |
| size_t & | m_nSize |
A File is a file, a directory or a symlink.
Definition at line 35 of file Ext2Directory.h.
|
private |
Copy constructors are hidden - unused!
| Ext2Directory::Ext2Directory | ( | const String & | name, |
| uintptr_t | inode_num, | ||
| Inode * | inode, | ||
| class Ext2Filesystem * | pFs, | ||
| File * | pParent | ||
| ) |
Constructor, should be called only by a Filesystem.
Definition at line 38 of file Ext2Directory.cc.
References File::setGidOnly(), File::setPermissionsOnly(), and File::setUidOnly().
|
override |
Destructor
Definition at line 53 of file Ext2Directory.cc.
Adds a directory entry.
Definition at line 108 of file Ext2Directory.cc.
References Directory::addCachedDirectoryEntry(), String::compare(), Vector< T >::count(), fileAttributeChanged(), File::isDirectory(), Ext2Filesystem::m_BlockSize, File::publishEvent(), Ext2Filesystem::readBlock(), Directory::reserveDirectoryEntry(), String::view(), and Ext2Filesystem::writeBlock().
Referenced by Ext2Filesystem::createNode().
Here is the caller graph for this function:
|
overrideprotectedvirtual |
Reimplemented from File.
Definition at line 52 of file Ext2Node-quota.cc.
|
overridevirtual |
Updates inode attributes.
Reimplemented from File.
Definition at line 408 of file Ext2Directory.cc.
References Ext2Node::fileAttributeChanged().
Referenced by addEntry().
Here is the caller graph for this function:
|
overridevirtual |
Reimplemented from File.
Definition at line 415 of file Ext2Directory.cc.
|
overridevirtual |
Kernel buffers only. Capacity zero queries size without touching output; successful mutations update ctime and publish one Attributes event.
Reimplemented from File.
Definition at line 143 of file Ext2Xattr-write.cc.
|
overridevirtual |
Reimplemented from File.
Definition at line 147 of file Ext2Xattr-write.cc.
|
private |
Definition at line 37 of file Ext2Rename.cc.
|
private |
Definition at line 69 of file Ext2Rename.cc.
|
private |
Definition at line 96 of file Ext2Directory.cc.
|
private |
Definition at line 423 of file Ext2Directory.cc.
|
overrideprivatevirtual |
Stream backing-store entries. Resident entries are merged by enumerate().
Reimplemented from Directory.
Definition at line 620 of file Ext2Directory.cc.
|
private |
Definition at line 456 of file Ext2Directory.cc.
Removes a directory entry.
Definition at line 318 of file Ext2Directory.cc.
References removeEntryLocked().
Referenced by Ext2Filesystem::createNode(), and Ext2Filesystem::removeNode().
Here is the caller graph for this function:Definition at line 323 of file Ext2Directory.cc.
References Vector< T >::count(), Directory::invalidateDirectoryEntry(), Ext2Filesystem::m_BlockSize, Ext2Filesystem::readBlock(), Ext2Filesystem::releaseInode(), and Ext2Filesystem::writeBlock().
Referenced by removeEntry().
Here is the caller graph for this function:
|
overridevirtual |
Reimplemented from File.
Definition at line 157 of file Ext2Xattr-write.cc.
|
private |
Definition at line 688 of file Ext2Directory.cc.
|
overrideprivatevirtual |
Resolve one backing-store entry. A found File must be new and untracked.
Reimplemented from Directory.
Definition at line 575 of file Ext2Directory.cc.
|
overrideprivatevirtual |
Resolve one backing record at a cookie returned by readDirectory(). Implementations must fall back to a full name lookup if the cookie has become stale, so this remains equivalent to resolveChild().
Reimplemented from Directory.
Definition at line 592 of file Ext2Directory.cc.
|
private |
Definition at line 559 of file Ext2Directory.cc.
|
private |
Definition at line 496 of file Ext2Directory.cc.
|
overridevirtual |
Reimplemented from File.
Definition at line 150 of file Ext2Xattr-write.cc.
|
overridevirtual |
Sync all cached pages for the file back to disk.
Returns false if any cached page cannot be synchronised. Successful pages remain written when another page fails.
Reimplemented from File.
Definition at line 55 of file Ext2Directory.cc.
References Vector< T >::count(), Vector< T >::erase(), and Ext2Filesystem::m_BlockSize.
|
private |
Definition at line 87 of file Ext2Directory.cc.
|
inlineoverridevirtual |
Delete all data from the file.
Reimplemented from File.
Definition at line 64 of file Ext2Directory.h.
|
overrideprotectedvirtual |
Reimplemented from File.
Definition at line 419 of file Ext2Directory.cc.
|
friend |
Definition at line 36 of file Ext2Directory.h.
|
private |
Definition at line 109 of file Ext2Directory.h.
|
private |
Definition at line 110 of file Ext2Directory.h.