The Pedigree Project  0.1
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | List of all members
FatDirectory Class Reference

#include <FatDirectory.h>

+ Inheritance diagram for FatDirectory:
+ Collaboration diagram for FatDirectory:

Public Member Functions

 FatDirectory (String name, uintptr_t cluster, class FatFilesystem *pFs, File *pParent, FatFileInfo &info, uint32_t dirClus=0, uint32_t dirOffset=0)
 
virtual ~FatDirectory ()
 
void truncate ()
 
virtual void cacheDirectoryContents ()
 
virtual bool addEntry (String filename, File *pFile, size_t type)
 
virtual bool removeEntry (File *pFile)
 
void fileAttributeChanged ()
 
virtual void setInode (uintptr_t inode)
 
uint32_t getDirCluster ()
 
void setDirCluster (uint32_t custom)
 
uint32_t getDirOffset ()
 
void setDirOffset (uint32_t custom)
 
- 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 ()
 
FilegetChild (size_t n)
 
size_t getNumChildren ()
 
virtual bool isCachePopulated () const
 
Filelookup (const HashedStringView &s) const
 
void remove (const HashedStringView &s)
 
DirectorygetReparsePoint () 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.
 
void setReparsePoint (Directory *pTarget)
 
bool addEphemeralFile (File *pFile)
 Add an ephemeral file to the directory. More...
 
bool empty ()
 
- 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
 
virtual uint64_t write (uint64_t location, uint64_t size, uintptr_t buffer, bool bCanBlock=true) final
 
virtual physical_uintptr_t getPhysicalPage (size_t offset)
 
virtual void returnPhysicalPage (size_t offset)
 
virtual void sync ()
 
virtual void sync (size_t offset, bool async)
 
Time::Timestamp getCreationTime ()
 
void setCreationTime (Time::Timestamp t)
 
Time::Timestamp getAccessedTime ()
 
void setAccessedTime (Time::Timestamp t)
 
Time::Timestamp getModifiedTime ()
 
void setModifiedTime (Time::Timestamp t)
 
String getName () const
 
void getName (String &s) const
 
virtual String getFullPath (bool bWithLabel=true)
 
size_t getSize ()
 
void setSize (size_t sz)
 
virtual bool isSymlink ()
 
virtual bool isPipe () const
 
virtual bool isFifo () const
 
virtual bool isSocket () const
 
uintptr_t getInode () const
 
FilesystemgetFilesystem () const
 
void setFilesystem (Filesystem *pFs)
 
virtual void increaseRefCount (bool bIsWriter)
 
virtual void decreaseRefCount (bool bIsWriter)
 
void setPermissions (uint32_t perms)
 
uint32_t getPermissions () const
 
void setUid (size_t uid)
 
size_t getUid () const
 
void setGid (size_t gid)
 
size_t getGid () const
 
FilegetParent () const
 
virtual int select (bool bWriting=false, int timeout=0)
 
void monitor (Thread *pThread, Event *pEvent)
 
void cullMonitorTargets (Thread *pThread)
 
virtual bool supports (const size_t command) const
 
virtual int command (const size_t command, void *buffer)
 
virtual size_t getBlockSize () const
 
void enableDirect ()
 
void disableDirect ()
 
virtual void preallocate (size_t expectedSize, bool zero=true)
 
virtual Fileopen ()
 

Static Public Member Functions

static const StringsymlinkSuffix ()
 
- Static Public Member Functions inherited from Directory
static DirectoryfromFile (File *pF)
 

Private Member Functions

 FatDirectory (const FatDirectory &file)
 
FatDirectoryoperator= (const FatDirectory &)
 

Private Attributes

uint32_t m_DirClus
 
uint32_t m_DirOffset
 
FatType m_Type
 
uintptr_t m_BlockSize
 
bool m_bRootDir
 
Mutex m_Lock
 
uint32_t m_DirBlockSize
 

Additional Inherited Members

- Protected Types inherited from Directory
typedef LazyEvaluate< File, DirectoryEntryMetadata, evaluateEntry, destroyEntryDirectoryEntry
 
- Protected Member Functions inherited from Directory
virtual const DirectoryEntryCachegetCache ()
 
void markCachePopulated ()
 
void addDirectoryEntry (const String &name, File *pTarget)
 
void addDirectoryEntry (const String &name, DirectoryEntryMetadata &&meta)
 
void preallocateDirectoryEntries (size_t count)
 
virtual FileconvertToFile (const DirectoryEntryMetadata &meta)
 
- Protected Member Functions inherited from File
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 void writeBlock (uint64_t location, uintptr_t addr)
 
virtual void extend (size_t newSize)
 
virtual void extend (size_t newSize, uint64_t location, uint64_t size)
 
void dataChanged ()
 
void getFilesystemLabel (HugeStaticString &s)
 
virtual void pinBlock (uint64_t location)
 
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)
 
- Static Protected Member Functions inherited from File
static void writeCallback (CacheConstants::CallbackCause cause, uintptr_t loc, uintptr_t page, void *meta)
 
- Protected Attributes inherited from File
String m_Name
 
Time::Timestamp m_AccessedTime
 
Time::Timestamp m_ModifiedTime
 
Time::Timestamp m_CreationTime
 
uintptr_t m_Inode
 
class Filesystemm_pFilesystem
 
size_t m_Size
 
Filem_pParent
 
size_t m_nWriters
 
size_t m_nReaders
 
size_t m_Uid
 
size_t m_Gid
 
uint32_t m_Permissions
 
HashTable< DataCacheKey, uintptr_t > m_DataCache
 
bool m_bDirect
 
Cache m_FillCache
 
Mutex m_Lock
 
List< MonitorTarget * > m_MonitorTargets
 

Detailed Description

A File is a file, a directory or a symlink.

Definition at line 32 of file FatDirectory.h.

Constructor & Destructor Documentation

FatDirectory::FatDirectory ( const FatDirectory file)
private

Copy constructors are hidden - unused!

Referenced by cacheDirectoryContents().

+ Here is the caller graph for this function:

FatDirectory::FatDirectory ( String  name,
uintptr_t  cluster,
class FatFilesystem pFs,
File pParent,
FatFileInfo info,
uint32_t  dirClus = 0,
uint32_t  dirOffset = 0 
)

Constructor, should be called only by a Filesystem.

Todo:
Permissions
Todo:
Ownership of files

Definition at line 35 of file FatDirectory.cc.

References FatFilesystem::m_BlockSize, FatFilesystem::m_Type, and setInode().

FatDirectory::~FatDirectory ( )
virtual

Destructor

Definition at line 58 of file FatDirectory.cc.

Member Function Documentation

bool FatDirectory::addEntry ( String  filename,
File pFile,
size_t  type 
)
virtual
void FatDirectory::cacheDirectoryContents ( )
virtual
void FatDirectory::fileAttributeChanged ( )
virtual

Updates inode attributes.

Reimplemented from File.

Definition at line 570 of file FatDirectory.cc.

Referenced by truncate().

+ Here is the caller graph for this function:

bool FatDirectory::removeEntry ( File pFile)
virtual

Removes a directory entry.

Todo:
Save the previous cluster in FatFile too

Definition at line 296 of file FatDirectory.cc.

References ERROR, FatFilesystem::getDirectoryEntry(), File::getName(), Directory::isCachePopulated(), File::isDirectory(), File::isSymlink(), m_Lock, and FatFilesystem::writeDirectoryEntry().

Referenced by FatFilesystem::remove(), and truncate().

+ Here is the caller graph for this function:

void FatDirectory::setInode ( uintptr_t  inode)
virtual

Set the internal cluster (in the case of FAT)

Reimplemented from File.

Definition at line 62 of file FatDirectory.cc.

References m_DirBlockSize, FatFilesystem::m_Superblock, and FatFilesystem::m_Type.

Referenced by FatFilesystem::createDirectory(), FatDirectory(), and truncate().

+ Here is the caller graph for this function:

void FatDirectory::truncate ( )
inlinevirtual

Delete all data from the file.

Reimplemented from File.

Definition at line 47 of file FatDirectory.h.

References addEntry(), cacheDirectoryContents(), fileAttributeChanged(), removeEntry(), and setInode().

Member Data Documentation

uint32_t FatDirectory::m_DirBlockSize
private

Number of bytes to iterate over for this directory

Definition at line 100 of file FatDirectory.h.

Referenced by cacheDirectoryContents(), and setInode().

Mutex FatDirectory::m_Lock
private

Lock for add/remove/cache operations, so we don't break horribly.

Definition at line 97 of file FatDirectory.h.

Referenced by addEntry(), cacheDirectoryContents(), and removeEntry().


The documentation for this class was generated from the following files: