1
0
Fork 0

speed up fat drive access

Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3714
This commit is contained in:
Sebastian Strohhäcker 2011-05-28 20:26:12 +00:00
parent 379727f63d
commit 1887b2590b
4 changed files with 17 additions and 8 deletions

View file

@ -982,11 +982,13 @@ bool fatDrive::GetFileAttr(char *name, Bit16u *attr) {
/* Find directory entry in parent directory */
Bit32s fileidx = 2;
if (dirClust==0) fileidx = 0; // root directory
while(directoryBrowse(dirClust, &fileEntry, fileidx)) {
Bit32s last_idx=0;
while(directoryBrowse(dirClust, &fileEntry, fileidx, last_idx)) {
if(memcmp(&fileEntry.entryname, &pathName[0], 11) == 0) {
*attr=fileEntry.attrib;
return true;
}
last_idx=fileidx;
fileidx++;
}
return false;
@ -994,12 +996,15 @@ bool fatDrive::GetFileAttr(char *name, Bit16u *attr) {
return true;
}
bool fatDrive::directoryBrowse(Bit32u dirClustNumber, direntry *useEntry, Bit32s entNum) {
bool fatDrive::directoryBrowse(Bit32u dirClustNumber, direntry *useEntry, Bit32s entNum, Bit32s start/*=0*/) {
direntry sectbuf[16]; /* 16 directory entries per sector */
Bit32u logentsector; /* Logical entry sector */
Bit32u entryoffset = 0; /* Index offset within sector */
Bit32u tmpsector;
Bit16u dirPos = 0;
if ((start<0) || (start>65535)) return false;
Bit16u dirPos = (Bit16u)start;
if (entNum<start) return false;
entNum-=start;
while(entNum>=0) {

View file

@ -171,7 +171,7 @@ public:
Bit32u appendCluster(Bit32u startCluster);
void deleteClustChain(Bit32u startCluster);
Bit32u getFirstFreeClust(void);
bool directoryBrowse(Bit32u dirClustNumber, direntry *useEntry, Bit32s entNum);
bool directoryBrowse(Bit32u dirClustNumber, direntry *useEntry, Bit32s entNum, Bit32s start=0);
bool directoryChange(Bit32u dirClustNumber, direntry *useEntry, Bit32s entNum);
imageDisk *loadedDisk;
bool created_successfully;