aboutsummaryrefslogtreecommitdiff
path: root/dep/CascLib/src/CascOpenStorage.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2017-08-17 17:31:02 +0200
committerShauren <shauren.trinity@gmail.com>2017-08-17 17:31:02 +0200
commit3f3991362848d80721dc8f4607518a9e451b60ad (patch)
treec82ad06fef28508be3e2847f7ad643cf26bd55d1 /dep/CascLib/src/CascOpenStorage.cpp
parent43d268d75c8b5afae94983f19363ac0e484e4afb (diff)
Dep/CascLib: Update to ladislav-zezula/CascLib@fb9442155352b36e56b74a6c0d265b3b62d20e3a
Diffstat (limited to 'dep/CascLib/src/CascOpenStorage.cpp')
-rw-r--r--dep/CascLib/src/CascOpenStorage.cpp32
1 files changed, 31 insertions, 1 deletions
diff --git a/dep/CascLib/src/CascOpenStorage.cpp b/dep/CascLib/src/CascOpenStorage.cpp
index 398dfb62960..ec277f67c13 100644
--- a/dep/CascLib/src/CascOpenStorage.cpp
+++ b/dep/CascLib/src/CascOpenStorage.cpp
@@ -121,6 +121,29 @@ static bool IsIndexFileName_V2(const TCHAR * szFileName)
_tcsicmp(szFileName + 0x0A, _T(".idx")) == 0);
}
+static bool IsRootFile_Starcraft1(LPBYTE pbFileData, DWORD cbFileData)
+{
+ LPBYTE pbFileEnd = pbFileData + cbFileData;
+ LPBYTE pbHashName;
+ LPBYTE pbHashEnd;
+
+ // Skip the file name
+ while(pbFileData < pbFileEnd && pbFileData[0] != '|')
+ pbFileData++;
+ if(pbFileData[0] != '|')
+ return false;
+
+ // Then, a MD5 must follow
+ pbHashName = pbHashEnd = pbFileData + 1;
+ while(pbHashEnd < pbFileEnd && pbHashEnd[0] != 0x0A)
+ pbHashEnd++;
+ if(pbHashEnd[0] != 0x0A)
+ return false;
+
+ // The length must be exactly 32 characters
+ return ((pbHashEnd - pbHashName) == 32);
+}
+
static bool IsCascIndexHeader_V1(LPBYTE pbFileData, DWORD cbFileData)
{
PFILE_INDEX_HEADER_V1 pIndexHeader = (PFILE_INDEX_HEADER_V1)pbFileData;
@@ -913,7 +936,10 @@ static int LoadRootFile(TCascStorage * hs, DWORD dwLocaleMask)
break;
default:
- nError = RootHandler_CreateWoW6(hs, pbRootFile, cbRootFile, dwLocaleMask);
+ if(IsRootFile_Starcraft1(pbRootFile, cbRootFile))
+ nError = RootHandler_CreateSC1(hs, pbRootFile, cbRootFile);
+ else
+ nError = RootHandler_CreateWoW6(hs, pbRootFile, cbRootFile, dwLocaleMask);
break;
}
}
@@ -1123,6 +1149,10 @@ bool WINAPI CascGetStorageInfo(
dwInfoValue = hs->dwBuildNumber;
break;
+ case CascStorageInstalledLocales:
+ dwInfoValue = hs->dwDefaultLocale;
+ break;
+
default:
SetLastError(ERROR_INVALID_PARAMETER);
return false;