aboutsummaryrefslogtreecommitdiff
path: root/src/tools/extractor_common
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2019-06-06 16:48:21 +0200
committerShauren <shauren.trinity@gmail.com>2019-06-08 17:09:24 +0200
commitfc330fd8ff0115804d9c4b53a1f810c00dd63de9 (patch)
treecfa10998fed66779834bf0b7a9b8b799d33d91d4 /src/tools/extractor_common
parent82c7b6c5688495d90c4ee5995a4ff74039348296 (diff)
Dep/CascLib: Update to ladislav-zezula/CascLib@a1197edf0b3bd4d52c3f39be7fa7b44bb0b98012
Diffstat (limited to 'src/tools/extractor_common')
-rw-r--r--src/tools/extractor_common/CascHandles.cpp28
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*/)