diff options
author | Shauren <shauren.trinity@gmail.com> | 2019-06-06 16:48:21 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2019-06-08 17:09:24 +0200 |
commit | fc330fd8ff0115804d9c4b53a1f810c00dd63de9 (patch) | |
tree | cfa10998fed66779834bf0b7a9b8b799d33d91d4 /src | |
parent | 82c7b6c5688495d90c4ee5995a4ff74039348296 (diff) |
Dep/CascLib: Update to ladislav-zezula/CascLib@a1197edf0b3bd4d52c3f39be7fa7b44bb0b98012
Diffstat (limited to 'src')
-rw-r--r-- | src/tools/extractor_common/CascHandles.cpp | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/src/tools/extractor_common/CascHandles.cpp b/src/tools/extractor_common/CascHandles.cpp index 44805fdccd1..9487b3de093 100644 --- a/src/tools/extractor_common/CascHandles.cpp +++ b/src/tools/extractor_common/CascHandles.cpp @@ -72,32 +72,30 @@ CASC::StorageHandle CASC::OpenStorage(boost::filesystem::path const& path, DWORD namespace CASC { - static DWORD GetStorageInfo(StorageHandle const& storage, CASC_STORAGE_INFO_CLASS storageInfoClass) + template<typename T> + static bool GetStorageInfo(StorageHandle const& storage, CASC_STORAGE_INFO_CLASS storageInfoClass, T* value) { - DWORD value = 0; size_t infoDataSizeNeeded = 0; - if (!::CascGetStorageInfo(storage.get(), storageInfoClass, &value, sizeof(value), &infoDataSizeNeeded)) - { - 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; + return ::CascGetStorageInfo(storage.get(), storageInfoClass, value, sizeof(T), &infoDataSizeNeeded); } } DWORD CASC::GetBuildNumber(StorageHandle const& storage) { - return GetStorageInfo(storage, CascStorageGameBuild); + CASC_STORAGE_PRODUCT product; + if (GetStorageInfo(storage, CascStorageProduct, &product)) + return product.dwBuildNumber; + + return 0; } DWORD CASC::GetInstalledLocalesMask(StorageHandle const& storage) { - return GetStorageInfo(storage, CascStorageInstalledLocales); + DWORD locales; + if (GetStorageInfo(storage, CascStorageInstalledLocales, &locales)) + return locales; + + return 0; } CASC::FileHandle CASC::OpenFile(StorageHandle const& storage, char const* fileName, DWORD localeMask, bool printErrors /*= false*/) |