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:
parent
75626ee0c3
commit
cffa206680
2 changed files with 9 additions and 5 deletions
|
@ -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)) {
|
||||
|
|
|
@ -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];
|
||||
|
|
Loading…
Add table
Reference in a new issue