aboutsummaryrefslogtreecommitdiff
path: root/src/tools/extractor_common
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2017-08-18 16:45:36 +0200
committerShauren <shauren.trinity@gmail.com>2017-08-18 16:45:36 +0200
commit7eab6dbb9542118c14899452c7d0cb550e6263a6 (patch)
tree96fd38d6451e0bed7395f79e29fd2aa02458df5b /src/tools/extractor_common
parent3f3991362848d80721dc8f4607518a9e451b60ad (diff)
Tools/Extractors: Implement proper installed locale detection
Diffstat (limited to 'src/tools/extractor_common')
-rw-r--r--src/tools/extractor_common/CascHandles.cpp31
-rw-r--r--src/tools/extractor_common/CascHandles.h1
2 files changed, 23 insertions, 9 deletions
diff --git a/src/tools/extractor_common/CascHandles.cpp b/src/tools/extractor_common/CascHandles.cpp
index 45897c15617..031f6ae79a6 100644
--- a/src/tools/extractor_common/CascHandles.cpp
+++ b/src/tools/extractor_common/CascHandles.cpp
@@ -70,21 +70,34 @@ CASC::StorageHandle CASC::OpenStorage(boost::filesystem::path const& path, DWORD
return StorageHandle(handle);
}
-DWORD CASC::GetBuildNumber(StorageHandle const& storage)
+namespace CASC
{
- DWORD buildNumber = 0;
- size_t infoDataSizeNeeded = 0;
- if (!::CascGetStorageInfo(storage.get(), CascStorageGameBuild, &buildNumber, sizeof(buildNumber), &infoDataSizeNeeded))
+ static DWORD GetStorageInfo(StorageHandle const& storage, CASC_STORAGE_INFO_CLASS storageInfoClass)
{
- if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
+ DWORD value = 0;
+ size_t infoDataSizeNeeded = 0;
+ if (!::CascGetStorageInfo(storage.get(), storageInfoClass, &value, sizeof(value), &infoDataSizeNeeded))
{
- std::unique_ptr<char> buf(new char[infoDataSizeNeeded]);
- ::CascGetStorageInfo(storage.get(), CascStorageGameBuild, buf.get(), infoDataSizeNeeded, &infoDataSizeNeeded);
- return *reinterpret_cast<DWORD*>(buf.get());
+ if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
+ {
+ std::unique_ptr<char> buf(new char[infoDataSizeNeeded]);
+ ::CascGetStorageInfo(storage.get(), storageInfoClass, buf.get(), infoDataSizeNeeded, &infoDataSizeNeeded);
+ return *reinterpret_cast<DWORD*>(buf.get());
+ }
}
+
+ return value;
}
+}
+
+DWORD CASC::GetBuildNumber(StorageHandle const& storage)
+{
+ return GetStorageInfo(storage, CascStorageGameBuild);
+}
- return buildNumber;
+DWORD CASC::GetInstalledLocalesMask(StorageHandle const& storage)
+{
+ return GetStorageInfo(storage, CascStorageInstalledLocales);
}
CASC::FileHandle CASC::OpenFile(StorageHandle const& storage, char const* fileName, DWORD localeMask, bool printErrors /*= false*/)
diff --git a/src/tools/extractor_common/CascHandles.h b/src/tools/extractor_common/CascHandles.h
index 583eecbf58f..ca51d1cbf11 100644
--- a/src/tools/extractor_common/CascHandles.h
+++ b/src/tools/extractor_common/CascHandles.h
@@ -50,6 +50,7 @@ namespace CASC
StorageHandle OpenStorage(boost::filesystem::path const& path, DWORD localeMask);
DWORD GetBuildNumber(StorageHandle const& storage);
+ DWORD GetInstalledLocalesMask(StorageHandle const& storage);
FileHandle OpenFile(StorageHandle const& storage, char const* fileName, DWORD localeMask, bool printErrors = false);
DWORD GetFileSize(FileHandle const& file, PDWORD fileSizeHigh);