31 DirEnt = DIRENT_FROM_LINK (ODir->ChildList.ForwardLink);
36 ASSERT (DirEnt->OFile ==
NULL);
63 ODir->Signature = FAT_ODIR_SIGNATURE;
65 ODir->CurrentCursor = &ODir->ChildList;
87 Volume = OFile->Volume;
89 if (!OFile->DirEnt->Invalid) {
94 ODir->DirCacheTag = OFile->FileCluster;
96 if (Volume->DirCacheCount == FAT_MAX_DIR_CACHE_COUNT) {
100 ODir = ODIR_FROM_DIRCACHELINK (Volume->DirCacheList.BackLink);
106 Volume->DirCacheCount++;
140 Volume = OFile->Volume;
142 DirCacheTag = OFile->FileCluster;
143 for (CurrentODirLink = Volume->DirCacheList.ForwardLink;
144 CurrentODirLink != &Volume->DirCacheList;
145 CurrentODirLink = CurrentODirLink->ForwardLink
148 CurrentODir = ODIR_FROM_DIRCACHELINK (CurrentODirLink);
149 if (CurrentODir->DirCacheTag == DirCacheTag) {
151 Volume->DirCacheCount--;
181 while (Volume->DirCacheCount > 0) {
182 ODir = ODIR_FROM_DIRCACHELINK (Volume->DirCacheList.BackLink);
185 Volume->DirCacheCount--;
BOOLEAN EFIAPI IsListEmpty(IN CONST LIST_ENTRY *ListHead)
LIST_ENTRY *EFIAPI InsertHeadList(IN OUT LIST_ENTRY *ListHead, IN OUT LIST_ENTRY *Entry)
LIST_ENTRY *EFIAPI RemoveEntryList(IN CONST LIST_ENTRY *Entry)
LIST_ENTRY *EFIAPI InitializeListHead(IN OUT LIST_ENTRY *ListHead)
STATIC VOID FatFreeODir(IN FAT_ODIR *ODir)
VOID FatRequestODir(IN FAT_OFILE *OFile)
VOID FatDiscardODir(IN FAT_OFILE *OFile)
VOID FatCleanupODirCache(IN FAT_VOLUME *Volume)
STATIC FAT_ODIR * FatAllocateODir(IN FAT_OFILE *OFile)
VOID *EFIAPI AllocateZeroPool(IN UINTN AllocationSize)
VOID EFIAPI FreePool(IN VOID *Buffer)
VOID FatFreeDirEnt(IN FAT_DIRENT *DirEnt)