diff options
author | Lukas Bagaric <deaeod@gmail.com> | 2013-04-23 23:18:56 +0200 |
---|---|---|
committer | Lukas Bagaric <deaeod@gmail.com> | 2013-04-23 23:18:56 +0200 |
commit | 426e0bb9c117fe043873d4c8f67e62a6ef034cf3 (patch) | |
tree | c5e76fc36f3a7b0f3351c37dba751f4a25c648c7 /src/SFileCompactArchive.cpp | |
parent | 2ab4cbfe957101aa96acb346e7ce1fe55ed8b683 (diff) |
Compact callback now no longer uses global variables. You should be able to compact different archives on different threads now.
Diffstat (limited to 'src/SFileCompactArchive.cpp')
-rw-r--r-- | src/SFileCompactArchive.cpp | 39 |
1 files changed, 16 insertions, 23 deletions
diff --git a/src/SFileCompactArchive.cpp b/src/SFileCompactArchive.cpp index d096cb1..f408419 100644 --- a/src/SFileCompactArchive.cpp +++ b/src/SFileCompactArchive.cpp @@ -15,13 +15,6 @@ #include "StormCommon.h" /*****************************************************************************/ -/* Local variables */ -/*****************************************************************************/ - -static ULONGLONG CompactBytesProcessed = 0; -static ULONGLONG CompactTotalBytes = 0; - -/*****************************************************************************/ /* Local functions */ /*****************************************************************************/ @@ -37,7 +30,7 @@ static int CheckIfAllFilesKnown(TMPQArchive * ha, const char * szListFile, LPDWO { // Notify the user if(ha->aCompactCB != NULL) - ha->aCompactCB(ha->pvCompactUserData, CCB_CHECKING_FILES, CompactBytesProcessed, CompactTotalBytes); + ha->aCompactCB(ha->pvCompactUserData, CCB_CHECKING_FILES, ha->CompactBytesProcessed, ha->CompactTotalBytes); nError = SFileAddListFile((HANDLE)ha, szListFile); } @@ -116,8 +109,8 @@ static int CopyNonMpqData( // Update the progress if(ha->aCompactCB != NULL) { - CompactBytesProcessed += dwToRead; - ha->aCompactCB(ha->pvCompactUserData, CCB_COPYING_NON_MPQ_DATA, CompactBytesProcessed, CompactTotalBytes); + ha->CompactBytesProcessed += dwToRead; + ha->aCompactCB(ha->pvCompactUserData, CCB_COPYING_NON_MPQ_DATA, ha->CompactBytesProcessed, ha->CompactTotalBytes); } // Decrement the number of data to be copied @@ -201,8 +194,8 @@ static int CopyMpqFileSectors( // Update compact progress if(ha->aCompactCB != NULL) { - CompactBytesProcessed += dwSectorOffsLen; - ha->aCompactCB(ha->pvCompactUserData, CCB_COMPACTING_FILES, CompactBytesProcessed, CompactTotalBytes); + ha->CompactBytesProcessed += dwSectorOffsLen; + ha->aCompactCB(ha->pvCompactUserData, CCB_COMPACTING_FILES, ha->CompactBytesProcessed, ha->CompactTotalBytes); } STORM_FREE(SectorOffsetsCopy); @@ -259,8 +252,8 @@ static int CopyMpqFileSectors( // Update compact progress if(ha->aCompactCB != NULL) { - CompactBytesProcessed += dwRawDataInSector; - ha->aCompactCB(ha->pvCompactUserData, CCB_COMPACTING_FILES, CompactBytesProcessed, CompactTotalBytes); + ha->CompactBytesProcessed += dwRawDataInSector; + ha->aCompactCB(ha->pvCompactUserData, CCB_COMPACTING_FILES, ha->CompactBytesProcessed, ha->CompactTotalBytes); } // Adjust byte counts @@ -287,8 +280,8 @@ static int CopyMpqFileSectors( // Update compact progress if(ha->aCompactCB != NULL) { - CompactBytesProcessed += dwCrcLength; - ha->aCompactCB(ha->pvCompactUserData, CCB_COMPACTING_FILES, CompactBytesProcessed, CompactTotalBytes); + ha->CompactBytesProcessed += dwCrcLength; + ha->aCompactCB(ha->pvCompactUserData, CCB_COMPACTING_FILES, ha->CompactBytesProcessed, ha->CompactTotalBytes); } // Size of the CRC block is also included in the compressed file size @@ -498,8 +491,8 @@ bool WINAPI SFileCompactArchive(HANDLE hMpq, const char * szListFile, bool /* bR if(nError == ERROR_SUCCESS) { // Initialize the progress variables for compact callback - FileStream_GetSize(ha->pStream, &CompactTotalBytes); - CompactBytesProcessed = 0; + FileStream_GetSize(ha->pStream, &(ha->CompactTotalBytes)); + ha->CompactBytesProcessed = 0; nError = CheckIfAllFilesKnown(ha, szListFile, pFileKeys); } @@ -522,7 +515,7 @@ bool WINAPI SFileCompactArchive(HANDLE hMpq, const char * szListFile, bool /* bR { // Inform the application about the progress if(ha->aCompactCB != NULL) - ha->aCompactCB(ha->pvCompactUserData, CCB_COPYING_NON_MPQ_DATA, CompactBytesProcessed, CompactTotalBytes); + ha->aCompactCB(ha->pvCompactUserData, CCB_COPYING_NON_MPQ_DATA, ha->CompactBytesProcessed, ha->CompactTotalBytes); ByteOffset = 0; ByteCount = ha->UserDataPos; @@ -555,7 +548,7 @@ bool WINAPI SFileCompactArchive(HANDLE hMpq, const char * szListFile, bool /* bR BSWAP_TMPQHEADER(ha->pHeader); // Update the progress - CompactBytesProcessed += ha->pHeader->dwHeaderSize; + ha->CompactBytesProcessed += ha->pHeader->dwHeaderSize; } // Now copy all files @@ -585,9 +578,9 @@ bool WINAPI SFileCompactArchive(HANDLE hMpq, const char * szListFile, bool /* bR nError = SaveMPQTables(ha); if(nError == ERROR_SUCCESS && ha->aCompactCB != NULL) { - CompactBytesProcessed += (ha->pHeader->dwHashTableSize * sizeof(TMPQHash)); - CompactBytesProcessed += (ha->pHeader->dwBlockTableSize * sizeof(TMPQBlock)); - ha->aCompactCB(ha->pvCompactUserData, CCB_CLOSING_ARCHIVE, CompactBytesProcessed, CompactTotalBytes); + ha->CompactBytesProcessed += (ha->pHeader->dwHashTableSize * sizeof(TMPQHash)); + ha->CompactBytesProcessed += (ha->pHeader->dwBlockTableSize * sizeof(TMPQBlock)); + ha->aCompactCB(ha->pvCompactUserData, CCB_CLOSING_ARCHIVE, ha->CompactBytesProcessed, ha->CompactTotalBytes); } } |