diff options
| author | Shauren <shauren.trinity@gmail.com> | 2017-08-18 16:45:36 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2017-08-18 16:45:36 +0200 |
| commit | 7eab6dbb9542118c14899452c7d0cb550e6263a6 (patch) | |
| tree | 96fd38d6451e0bed7395f79e29fd2aa02458df5b /src/tools/extractor_common | |
| parent | 3f3991362848d80721dc8f4607518a9e451b60ad (diff) | |
Tools/Extractors: Implement proper installed locale detection
Diffstat (limited to 'src/tools/extractor_common')
| -rw-r--r-- | src/tools/extractor_common/CascHandles.cpp | 31 | ||||
| -rw-r--r-- | src/tools/extractor_common/CascHandles.h | 1 |
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); |
