summaryrefslogtreecommitdiff
path: root/src/SFileListFile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/SFileListFile.cpp')
-rw-r--r--src/SFileListFile.cpp26
1 files changed, 18 insertions, 8 deletions
diff --git a/src/SFileListFile.cpp b/src/SFileListFile.cpp
index 058fc7a..b2db0c5 100644
--- a/src/SFileListFile.cpp
+++ b/src/SFileListFile.cpp
@@ -50,13 +50,8 @@ static char * CopyListLine(char * szListLine, const char * szFileName)
static bool FreeListFileCache(TListFileCache * pCache)
{
// Valid parameter check
- if(pCache == NULL)
- return false;
-
- // Close the listfile
- if(pCache->hFile != NULL)
- SFileCloseFile(pCache->hFile);
- STORM_FREE(pCache);
+ if(pCache != NULL)
+ STORM_FREE(pCache);
return true;
}
@@ -575,6 +570,10 @@ HANDLE WINAPI SListFileFindFirstFile(HANDLE hMpq, const char * szListFile, const
// Perform file search
if(nError == ERROR_SUCCESS)
{
+ // The listfile handle is in the cache now
+ hListFile = NULL;
+
+ // Iterate through the listfile
for(;;)
{
// Read the (next) line
@@ -601,6 +600,10 @@ HANDLE WINAPI SListFileFindFirstFile(HANDLE hMpq, const char * szListFile, const
memset(lpFindFileData, 0, sizeof(SFILE_FIND_DATA));
SetLastError(nError);
}
+
+ // Close remaining unowned listfile handle
+ if(hListFile != NULL)
+ SFileCloseFile(hListFile);
return (HANDLE)pCache;
}
@@ -639,6 +642,13 @@ bool WINAPI SListFileFindNextFile(HANDLE hFind, SFILE_FIND_DATA * lpFindFileData
bool WINAPI SListFileFindClose(HANDLE hFind)
{
- return FreeListFileCache((TListFileCache *)hFind);
+ TListFileCache * pCache = (TListFileCache *)hFind;
+
+ if(pCache == NULL)
+ return false;
+
+ if(pCache->hFile != NULL)
+ SFileCloseFile(pCache->hFile);
+ return FreeListFileCache(pCache);
}