1
0
Fork 0

Improved search for free dir id

Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@693
This commit is contained in:
Ulf Wohlers 2003-02-25 13:28:42 +00:00
parent 75626ee0c3
commit cffa206680
2 changed files with 9 additions and 5 deletions

View file

@ -78,9 +78,9 @@ DOS_Drive_Cache::~DOS_Drive_Cache(void)
for (Bit32u i=0; i<MAX_OPENDIRS; i++) dirSearch[i] = 0;
};
Bit16u DOS_Drive_Cache::GetFreeID(void)
Bit16u DOS_Drive_Cache::GetFreeID(CFileInfo* dir)
{
for (Bit32u i=0; i<MAX_OPENDIRS; i++) if (free[i]) return i;
for (Bit32u i=0; i<MAX_OPENDIRS; i++) if (free[i] || (dir==dirSearch[i])) return i;
LOG_ERROR("DIRCACHE: Too many open directorys!");
return 0;
};
@ -464,7 +464,7 @@ bool DOS_Drive_Cache::OpenDir(const char* path, Bit16u& id)
bool DOS_Drive_Cache::OpenDir(CFileInfo* dir, char* expand, Bit16u& id)
{
id = GetFreeID();
id = GetFreeID(dir);
dirSearch[id] = dir;
// Add "/"
char end[2]={CROSS_FILESPLIT,0};
@ -511,7 +511,10 @@ bool DOS_Drive_Cache::ReadDir(Bit16u id, struct dirent* &result)
if (!IsCachedIn(dirSearch[id])) {
// Try to open directory
DIR* dirp = opendir(dirPath);
if (!dirp) return false;
if (!dirp) {
free[id] = true;
return false;
}
// Read complete directory
struct dirent* tmpres;
while (tmpres = readdir(dirp)) {

View file

@ -81,7 +81,8 @@ private:
bool RemoveSpaces (char* str);
bool OpenDir (CFileInfo* dir, char* path, Bit16u& id);
void CreateEntry (CFileInfo* dir, const char* name);
Bit16u GetFreeID (void);
Bit16u GetFreeID (CFileInfo* dir);
CFileInfo* dirBase;
char dirPath [CROSS_LEN];