diff options
Diffstat (limited to 'dep/CascLib/src/CascRootFile_Install.cpp')
-rw-r--r-- | dep/CascLib/src/CascRootFile_Install.cpp | 65 |
1 files changed, 29 insertions, 36 deletions
diff --git a/dep/CascLib/src/CascRootFile_Install.cpp b/dep/CascLib/src/CascRootFile_Install.cpp index a0b00f73168..86d621e2e47 100644 --- a/dep/CascLib/src/CascRootFile_Install.cpp +++ b/dep/CascLib/src/CascRootFile_Install.cpp @@ -25,30 +25,7 @@ struct TRootHandler_Install : public TFileTreeRoot dwFeatures |= (CASC_FEATURE_FILE_NAMES | CASC_FEATURE_ROOT_CKEY); } - static int CaptureInstallHeader(CASC_INSTALL_HEADER & InHeader, LPBYTE pbFileData, size_t cbFileData) - { - PFILE_INSTALL_HEADER pFileHeader = (PFILE_INSTALL_HEADER)pbFileData; - - // Check the signature ('DL') and version - if (cbFileData < sizeof(FILE_INSTALL_HEADER) || pFileHeader->Magic != FILE_MAGIC_INSTALL || pFileHeader->Version != 1) - return ERROR_BAD_FORMAT; - - // Note that we don't support CKey sizes greater than 0x10 in the INSTALL file - if (pFileHeader->EKeyLength > MD5_HASH_SIZE) - return ERROR_BAD_FORMAT; - - // Capture the header version 1 - memset(&InHeader, 0, sizeof(CASC_INSTALL_HEADER)); - InHeader.Magic = pFileHeader->Magic; - InHeader.Version = pFileHeader->Version; - InHeader.EKeyLength = pFileHeader->EKeyLength; - InHeader.TagCount = ConvertBytesToInteger_2(pFileHeader->TagCount); - InHeader.EntryCount = ConvertBytesToInteger_4(pFileHeader->EntryCount); - InHeader.HeaderLength = sizeof(FILE_INSTALL_HEADER); - return ERROR_SUCCESS; - } - - int Load(TCascStorage * hs, CASC_INSTALL_HEADER InHeader, LPBYTE pbInstallFile, LPBYTE pbInstallEnd) + DWORD Load(TCascStorage * hs, CASC_INSTALL_HEADER InHeader, LPBYTE pbInstallFile, LPBYTE pbInstallEnd) { PCASC_CKEY_ENTRY pCKeyEntry; const char * szString; @@ -90,32 +67,48 @@ struct TRootHandler_Install : public TFileTreeRoot //----------------------------------------------------------------------------- // Public functions -// -// Starcraft ROOT file is a text file with the following format: -// HD2/portraits/NBluCrit/NLCFID01.webm|c2795b120592355d45eba9cdc37f691e -// locales/enUS/Assets/campaign/EXPZerg/Zerg08/staredit/wav/zovtra01.ogg|316b0274bf2dabaa8db60c3ff1270c85 -// locales/zhCN/Assets/sound/terran/ghost/tghdth01.wav|6637ed776bd22089e083b8b0b2c0374c -// +DWORD CaptureInstallHeader(CASC_INSTALL_HEADER & InHeader, LPBYTE pbFileData, size_t cbFileData) +{ + PFILE_INSTALL_HEADER pFileHeader = (PFILE_INSTALL_HEADER)pbFileData; + + // Check the signature ('DL') and version + if (cbFileData < sizeof(FILE_INSTALL_HEADER) || pFileHeader->Magic != FILE_MAGIC_INSTALL || pFileHeader->Version != 1) + return ERROR_BAD_FORMAT; + + // Note that we don't support CKey sizes greater than 0x10 in the INSTALL file + if (pFileHeader->EKeyLength > MD5_HASH_SIZE) + return ERROR_BAD_FORMAT; + + // Capture the header version 1 + memset(&InHeader, 0, sizeof(CASC_INSTALL_HEADER)); + InHeader.Magic = pFileHeader->Magic; + InHeader.Version = pFileHeader->Version; + InHeader.EKeyLength = pFileHeader->EKeyLength; + InHeader.TagCount = ConvertBytesToInteger_2(pFileHeader->TagCount); + InHeader.EntryCount = ConvertBytesToInteger_4(pFileHeader->EntryCount); + InHeader.HeaderLength = sizeof(FILE_INSTALL_HEADER); + return ERROR_SUCCESS; +} -int RootHandler_CreateInstall(TCascStorage * hs, LPBYTE pbInstallFile, DWORD cbInstallFile) +DWORD RootHandler_CreateInstall(TCascStorage * hs, LPBYTE pbInstallFile, DWORD cbInstallFile) { CASC_INSTALL_HEADER InHeader; TRootHandler_Install * pRootHandler = NULL; - int nError = ERROR_BAD_FORMAT; + DWORD dwErrCode = ERROR_BAD_FORMAT; // Capture the header of the DOWNLOAD file - nError = TRootHandler_Install::CaptureInstallHeader(InHeader, pbInstallFile, cbInstallFile); - if (nError == ERROR_SUCCESS) + dwErrCode = CaptureInstallHeader(InHeader, pbInstallFile, cbInstallFile); + if (dwErrCode == ERROR_SUCCESS) { // Allocate the root handler object pRootHandler = new TRootHandler_Install(); if (pRootHandler != NULL) { // Parse the entire install manifest - nError = pRootHandler->Load(hs, InHeader, pbInstallFile, pbInstallFile + cbInstallFile); + dwErrCode = pRootHandler->Load(hs, InHeader, pbInstallFile, pbInstallFile + cbInstallFile); hs->pRootHandler = pRootHandler; } } - return nError; + return dwErrCode; } |