diff options
author | Ladislav <Zezula> | 2013-12-16 17:02:44 +0100 |
---|---|---|
committer | Ladislav <Zezula> | 2013-12-16 17:02:44 +0100 |
commit | 55f159cf69d8b4816876653d25239abf6c3ef5a4 (patch) | |
tree | 7f9dd1d21d8dd5e207a6ef9765de15a02842cc78 /src/SFileListFile.cpp | |
parent | 60ef0346ba14b7153c9efd40d0aa6dd01d1d2671 (diff) |
+ Fixed handle problem
Diffstat (limited to 'src/SFileListFile.cpp')
-rw-r--r-- | src/SFileListFile.cpp | 26 |
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); } |