diff options
author | Shauren <shauren.trinity@gmail.com> | 2019-08-10 19:03:24 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2019-08-10 19:03:24 +0200 |
commit | 420e0d0fd7c7b97c7b62b7463746da75bd30553b (patch) | |
tree | 68cffa05857ead661b14440371136f137ab9c15b /src/tools/extractor_common | |
parent | cd720efbfa60f434f420ab66e220eca742c48e45 (diff) |
Tools/Extractors: Swapped to new casclib 64bit file size functions
Diffstat (limited to 'src/tools/extractor_common')
-rw-r--r-- | src/tools/extractor_common/CascHandles.cpp | 47 | ||||
-rw-r--r-- | src/tools/extractor_common/CascHandles.h | 23 | ||||
-rw-r--r-- | src/tools/extractor_common/DB2CascFileSource.cpp | 16 | ||||
-rw-r--r-- | src/tools/extractor_common/DB2CascFileSource.h | 6 |
4 files changed, 51 insertions, 41 deletions
diff --git a/src/tools/extractor_common/CascHandles.cpp b/src/tools/extractor_common/CascHandles.cpp index cfce1c22999..9cc2fde7c42 100644 --- a/src/tools/extractor_common/CascHandles.cpp +++ b/src/tools/extractor_common/CascHandles.cpp @@ -19,7 +19,7 @@ #include <CascLib.h> #include <boost/filesystem/operations.hpp> -char const* CASC::HumanReadableCASCError(DWORD error) +char const* CASC::HumanReadableCASCError(uint32 error) { switch (error) { @@ -55,7 +55,7 @@ void CASC::FileDeleter::operator()(HANDLE handle) ::CascCloseFile(handle); } -CASC::StorageHandle CASC::OpenStorage(boost::filesystem::path const& path, DWORD localeMask, char const* product) +CASC::StorageHandle CASC::OpenStorage(boost::filesystem::path const& path, uint32 localeMask, char const* product) { std::string strPath = path.string(); CASC_OPEN_STORAGE_ARGS args = {}; @@ -87,16 +87,16 @@ namespace CASC } } -DWORD CASC::GetBuildNumber(StorageHandle const& storage) +uint32 CASC::GetBuildNumber(StorageHandle const& storage) { CASC_STORAGE_PRODUCT product; if (GetStorageInfo(storage, CascStorageProduct, &product)) - return product.dwBuildNumber; + return product.BuildNumber; return 0; } -DWORD CASC::GetInstalledLocalesMask(StorageHandle const& storage) +uint32 CASC::GetInstalledLocalesMask(StorageHandle const& storage) { DWORD locales; if (GetStorageInfo(storage, CascStorageInstalledLocales, &locales)) @@ -105,12 +105,12 @@ DWORD CASC::GetInstalledLocalesMask(StorageHandle const& storage) return 0; } -bool CASC::HasTactKey(StorageHandle const& storage, ULONGLONG keyLookup) +bool CASC::HasTactKey(StorageHandle const& storage, uint64 keyLookup) { return CascFindEncryptionKey(storage.get(), keyLookup) != nullptr; } -CASC::FileHandle CASC::OpenFile(StorageHandle const& storage, char const* fileName, DWORD localeMask, bool printErrors /*= false*/, bool zerofillEncryptedParts /*= false*/) +CASC::FileHandle CASC::OpenFile(StorageHandle const& storage, char const* fileName, uint32 localeMask, bool printErrors /*= false*/, bool zerofillEncryptedParts /*= false*/) { DWORD openFlags = CASC_OPEN_BY_NAME; if (zerofillEncryptedParts) @@ -131,7 +131,7 @@ CASC::FileHandle CASC::OpenFile(StorageHandle const& storage, char const* fileNa return FileHandle(handle); } -CASC::FileHandle CASC::OpenFile(StorageHandle const& storage, DWORD fileDataId, DWORD localeMask, bool printErrors /*= false*/, bool zerofillEncryptedParts /*= false*/) +CASC::FileHandle CASC::OpenFile(StorageHandle const& storage, uint32 fileDataId, uint32 localeMask, bool printErrors /*= false*/, bool zerofillEncryptedParts /*= false*/) { DWORD openFlags = CASC_OPEN_BY_FILEID; if (zerofillEncryptedParts) @@ -152,24 +152,39 @@ CASC::FileHandle CASC::OpenFile(StorageHandle const& storage, DWORD fileDataId, return FileHandle(handle); } -DWORD CASC::GetFileSize(FileHandle const& file, PDWORD fileSizeHigh) +int64 CASC::GetFileSize(FileHandle const& file) { - return ::CascGetFileSize(file.get(), fileSizeHigh); + ULONGLONG size; + if (!::CascGetFileSize64(file.get(), &size)) + return -1; + + return int64(size); } -DWORD CASC::GetFilePointer(FileHandle const& file) +int64 CASC::GetFilePointer(FileHandle const& file) { - return ::CascSetFilePointer(file.get(), 0, nullptr, FILE_CURRENT); + ULONGLONG position; + if (!::CascSetFilePointer64(file.get(), 0, &position, FILE_CURRENT)) + return -1; + + return int64(position); } -bool CASC::SetFilePointer(FileHandle const& file, LONGLONG position) +bool CASC::SetFilePointer(FileHandle const& file, int64 position) { LONG parts[2]; memcpy(parts, &position, sizeof(parts)); - return ::CascSetFilePointer(file.get(), parts[0], &parts[1], FILE_BEGIN) != CASC_INVALID_POS; + return ::CascSetFilePointer64(file.get(), position, nullptr, FILE_BEGIN); } -bool CASC::ReadFile(FileHandle const& file, void* buffer, DWORD bytes, PDWORD bytesRead) +bool CASC::ReadFile(FileHandle const& file, void* buffer, uint32 bytes, uint32* bytesRead) { - return ::CascReadFile(file.get(), buffer, bytes, bytesRead); + DWORD bytesReadDWORD; + if (!::CascReadFile(file.get(), buffer, bytes, &bytesReadDWORD)) + return false; + + if (bytesRead) + *bytesRead = bytesReadDWORD; + + return true; } diff --git a/src/tools/extractor_common/CascHandles.h b/src/tools/extractor_common/CascHandles.h index 008f118c68d..809df4ce67f 100644 --- a/src/tools/extractor_common/CascHandles.h +++ b/src/tools/extractor_common/CascHandles.h @@ -18,6 +18,7 @@ #ifndef CascHandles_h__ #define CascHandles_h__ +#include "Define.h" #include <CascPort.h> #include <memory> @@ -46,19 +47,19 @@ namespace CASC typedef std::unique_ptr<HANDLE, StorageDeleter> StorageHandle; typedef std::unique_ptr<HANDLE, FileDeleter> FileHandle; - char const* HumanReadableCASCError(DWORD error); + char const* HumanReadableCASCError(uint32 error); - StorageHandle OpenStorage(boost::filesystem::path const& path, DWORD localeMask, char const* product); - DWORD GetBuildNumber(StorageHandle const& storage); - DWORD GetInstalledLocalesMask(StorageHandle const& storage); - bool HasTactKey(StorageHandle const& storage, ULONGLONG keyLookup); + StorageHandle OpenStorage(boost::filesystem::path const& path, uint32 localeMask, char const* product); + uint32 GetBuildNumber(StorageHandle const& storage); + uint32 GetInstalledLocalesMask(StorageHandle const& storage); + bool HasTactKey(StorageHandle const& storage, uint64 keyLookup); - FileHandle OpenFile(StorageHandle const& storage, char const* fileName, DWORD localeMask, bool printErrors = false, bool zerofillEncryptedParts = false); - FileHandle OpenFile(StorageHandle const& storage, DWORD fileDataId, DWORD localeMask, bool printErrors = false, bool zerofillEncryptedParts = false); - DWORD GetFileSize(FileHandle const& file, PDWORD fileSizeHigh); - DWORD GetFilePointer(FileHandle const& file); - bool SetFilePointer(FileHandle const& file, LONGLONG position); - bool ReadFile(FileHandle const& file, void* buffer, DWORD bytes, PDWORD bytesRead); + FileHandle OpenFile(StorageHandle const& storage, char const* fileName, uint32 localeMask, bool printErrors = false, bool zerofillEncryptedParts = false); + FileHandle OpenFile(StorageHandle const& storage, uint32 fileDataId, uint32 localeMask, bool printErrors = false, bool zerofillEncryptedParts = false); + int64 GetFileSize(FileHandle const& file); + int64 GetFilePointer(FileHandle const& file); + bool SetFilePointer(FileHandle const& file, int64 position); + bool ReadFile(FileHandle const& file, void* buffer, uint32 bytes, uint32* bytesRead); } #endif // CascHandles_h__ diff --git a/src/tools/extractor_common/DB2CascFileSource.cpp b/src/tools/extractor_common/DB2CascFileSource.cpp index c697b01b7fc..b4380e3160b 100644 --- a/src/tools/extractor_common/DB2CascFileSource.cpp +++ b/src/tools/extractor_common/DB2CascFileSource.cpp @@ -32,29 +32,23 @@ bool DB2CascFileSource::IsOpen() const bool DB2CascFileSource::Read(void* buffer, std::size_t numBytes) { - DWORD bytesRead = 0; + uint32 bytesRead = 0; return CASC::ReadFile(_fileHandle, buffer, numBytes, &bytesRead) && numBytes == bytesRead; } -std::size_t DB2CascFileSource::GetPosition() const +int64 DB2CascFileSource::GetPosition() const { return CASC::GetFilePointer(_fileHandle); } -bool DB2CascFileSource::SetPosition(std::size_t position) +bool DB2CascFileSource::SetPosition(int64 position) { return CASC::SetFilePointer(_fileHandle, position); } -std::size_t DB2CascFileSource::GetFileSize() const +int64 DB2CascFileSource::GetFileSize() const { - DWORD sizeLow = 0; - DWORD sizeHigh = 0; - sizeLow = CASC::GetFileSize(_fileHandle, &sizeHigh); - if (sizeLow == CASC_INVALID_SIZE) - return std::size_t(-1); - - return std::size_t(uint64(sizeLow) | (uint64(sizeHigh) << 32)); + return CASC::GetFileSize(_fileHandle); } CASC::FileHandle const& DB2CascFileSource::GetHandle() const diff --git a/src/tools/extractor_common/DB2CascFileSource.h b/src/tools/extractor_common/DB2CascFileSource.h index f5686a802c8..63b282099af 100644 --- a/src/tools/extractor_common/DB2CascFileSource.h +++ b/src/tools/extractor_common/DB2CascFileSource.h @@ -27,9 +27,9 @@ struct DB2CascFileSource : public DB2FileSource DB2CascFileSource(CASC::StorageHandle const& storage, uint32 fileDataId, bool printErrors = true); bool IsOpen() const override; bool Read(void* buffer, std::size_t numBytes) override; - std::size_t GetPosition() const override; - bool SetPosition(std::size_t position) override; - std::size_t GetFileSize() const override; + int64 GetPosition() const override; + bool SetPosition(int64 position) override; + int64 GetFileSize() const override; CASC::FileHandle const& GetHandle() const; char const* GetFileName() const override; |