aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/tools/extractor_common/CascHandles.cpp16
-rw-r--r--src/tools/extractor_common/CascHandles.h4
-rw-r--r--src/tools/extractor_common/DB2CascFileSource.cpp8
-rw-r--r--src/tools/extractor_common/DB2CascFileSource.h1
-rw-r--r--src/tools/map_extractor/System.cpp16
5 files changed, 15 insertions, 30 deletions
diff --git a/src/tools/extractor_common/CascHandles.cpp b/src/tools/extractor_common/CascHandles.cpp
index eb84a084a11..baed5e61b7a 100644
--- a/src/tools/extractor_common/CascHandles.cpp
+++ b/src/tools/extractor_common/CascHandles.cpp
@@ -104,10 +104,14 @@ bool CASC::HasTactKey(StorageHandle const& storage, ULONGLONG keyLookup)
return CascFindEncryptionKey(storage.get(), keyLookup) != nullptr;
}
-CASC::FileHandle CASC::OpenFile(StorageHandle const& storage, char const* fileName, DWORD localeMask, bool printErrors /*= false*/)
+CASC::FileHandle CASC::OpenFile(StorageHandle const& storage, char const* fileName, DWORD localeMask, bool printErrors /*= false*/, bool zerofillEncryptedParts /*= false*/)
{
+ DWORD openFlags = CASC_OPEN_BY_NAME;
+ if (zerofillEncryptedParts)
+ openFlags |= CASC_OVERCOME_ENCRYPTED;
+
HANDLE handle = nullptr;
- if (!::CascOpenFile(storage.get(), fileName, localeMask, CASC_OPEN_BY_NAME, &handle))
+ if (!::CascOpenFile(storage.get(), fileName, localeMask, openFlags, &handle))
{
DWORD lastError = GetLastError(); // support checking error set by *Open* call, not the next *Close*
if (printErrors)
@@ -121,10 +125,14 @@ 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*/)
+CASC::FileHandle CASC::OpenFile(StorageHandle const& storage, DWORD fileDataId, DWORD localeMask, bool printErrors /*= false*/, bool zerofillEncryptedParts /*= false*/)
{
+ DWORD openFlags = CASC_OPEN_BY_FILEID;
+ if (zerofillEncryptedParts)
+ openFlags |= CASC_OVERCOME_ENCRYPTED;
+
HANDLE handle = nullptr;
- if (!::CascOpenFile(storage.get(), CASC_FILE_DATA_ID(fileDataId), localeMask, CASC_OPEN_BY_FILEID, &handle))
+ if (!::CascOpenFile(storage.get(), CASC_FILE_DATA_ID(fileDataId), localeMask, openFlags, &handle))
{
DWORD lastError = GetLastError(); // support checking error set by *Open* call, not the next *Close*
if (printErrors)
diff --git a/src/tools/extractor_common/CascHandles.h b/src/tools/extractor_common/CascHandles.h
index 9feafdbf4af..4f536ce9ecc 100644
--- a/src/tools/extractor_common/CascHandles.h
+++ b/src/tools/extractor_common/CascHandles.h
@@ -53,8 +53,8 @@ namespace CASC
DWORD GetInstalledLocalesMask(StorageHandle const& storage);
bool HasTactKey(StorageHandle const& storage, ULONGLONG keyLookup);
- FileHandle OpenFile(StorageHandle const& storage, char const* fileName, DWORD localeMask, bool printErrors = false);
- FileHandle OpenFile(StorageHandle const& storage, DWORD fileDataId, DWORD localeMask, bool printErrors = false);
+ 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);
diff --git a/src/tools/extractor_common/DB2CascFileSource.cpp b/src/tools/extractor_common/DB2CascFileSource.cpp
index 58f8567dda3..c697b01b7fc 100644
--- a/src/tools/extractor_common/DB2CascFileSource.cpp
+++ b/src/tools/extractor_common/DB2CascFileSource.cpp
@@ -19,15 +19,9 @@
#include "StringFormat.h"
#include <CascLib.h>
-DB2CascFileSource::DB2CascFileSource(CASC::StorageHandle const& storage, std::string fileName, bool printErrors /*= true*/)
-{
- _fileHandle = CASC::OpenFile(storage, fileName.c_str(), CASC_LOCALE_NONE, printErrors);
- _fileName = std::move(fileName);
-}
-
DB2CascFileSource::DB2CascFileSource(CASC::StorageHandle const& storage, uint32 fileDataId, bool printErrors /*= true*/)
{
- _fileHandle = CASC::OpenFile(storage, fileDataId, CASC_LOCALE_NONE, printErrors);
+ _fileHandle = CASC::OpenFile(storage, fileDataId, CASC_LOCALE_NONE, printErrors, true);
_fileName = Trinity::StringFormat("FileDataId: %u", fileDataId);
}
diff --git a/src/tools/extractor_common/DB2CascFileSource.h b/src/tools/extractor_common/DB2CascFileSource.h
index 80559ff8d41..f5686a802c8 100644
--- a/src/tools/extractor_common/DB2CascFileSource.h
+++ b/src/tools/extractor_common/DB2CascFileSource.h
@@ -24,7 +24,6 @@
struct DB2CascFileSource : public DB2FileSource
{
- DB2CascFileSource(CASC::StorageHandle const& storage, std::string fileName, bool printErrors = true);
DB2CascFileSource(CASC::StorageHandle const& storage, uint32 fileDataId, bool printErrors = true);
bool IsOpen() const override;
bool Read(void* buffer, std::size_t numBytes) override;
diff --git a/src/tools/map_extractor/System.cpp b/src/tools/map_extractor/System.cpp
index dcbbc0547d0..ff05df3119c 100644
--- a/src/tools/map_extractor/System.cpp
+++ b/src/tools/map_extractor/System.cpp
@@ -1251,22 +1251,6 @@ bool ExtractDB2File(uint32 fileDataId, char const* cascFileName, int locale, boo
readBytes = 0;
if (!CASC::ReadFile(source.GetHandle(), buffer, std::min<DWORD>(fileSize, readBatchSize), &readBytes))
{
- if (GetLastError() == ERROR_FILE_ENCRYPTED)
- {
- // shrink block size to read as much unencrypted data as possible
- if (readBatchSize != 1)
- {
- readBatchSize = std::max<DWORD>(1, readBatchSize / 2);
- continue;
- }
-
- uint8 zero = 0;
- --fileSize;
- fwrite(&zero, 1, 1, output);
- source.SetPosition(source.GetPosition() + 1);
- continue;
- }
-
printf("Can't read file '%s'\n", outputFileName.c_str());
fclose(output);
boost::filesystem::remove(outputPath);