From 55f159cf69d8b4816876653d25239abf6c3ef5a4 Mon Sep 17 00:00:00 2001 From: Ladislav Date: Mon, 16 Dec 2013 17:02:44 +0100 Subject: + Fixed handle problem --- src/SFileListFile.cpp | 26 ++++++++++++++++++-------- test/Test.cpp | 4 ---- 2 files changed, 18 insertions(+), 12 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); } diff --git a/test/Test.cpp b/test/Test.cpp index 7487cad..a9cc5e6 100644 --- a/test/Test.cpp +++ b/test/Test.cpp @@ -2909,10 +2909,6 @@ int main(int argc, char * argv[]) if(nError == ERROR_SUCCESS) nError = TestOpenFile_OpenById("MPQ_1997_v1_Diablo1_DIABDAT.MPQ"); - // Open an empty archive (found in WoW cache - it's just a header) - if(nError == ERROR_SUCCESS) - nError = TestOpenArchive("WoW-1.2.4-to-1.3.0-enGB-patch.exe"); - // Open an empty archive (found in WoW cache - it's just a header) if(nError == ERROR_SUCCESS) nError = TestOpenArchive("MPQ_2012_v2_EmptyMpq.MPQ"); -- cgit v1.2.3