diff options
| author | Shauren <shauren.trinity@gmail.com> | 2017-01-18 17:18:20 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2017-01-18 17:20:16 +0100 |
| commit | 3fd51db845e9753e4320798d1f2e41688d78d852 (patch) | |
| tree | 754adaf982bb204b34ab7b7c549beb0c4d62a078 /src/tools/vmap4_extractor | |
| parent | 9eda3d85423b4b5a84ad0c45e1bc06db37b6eb5c (diff) | |
Tools/Extractors: Intruduce safe casc handles and fix all casc related memory leaks
CID 1254545
CID 1254555
CID 1254588
CID 1343649
Diffstat (limited to 'src/tools/vmap4_extractor')
| -rw-r--r-- | src/tools/vmap4_extractor/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | src/tools/vmap4_extractor/DB2.cpp | 38 | ||||
| -rw-r--r-- | src/tools/vmap4_extractor/DB2.h | 3 | ||||
| -rw-r--r-- | src/tools/vmap4_extractor/adtfile.cpp | 2 | ||||
| -rw-r--r-- | src/tools/vmap4_extractor/adtfile.h | 4 | ||||
| -rw-r--r-- | src/tools/vmap4_extractor/cascfile.cpp (renamed from src/tools/vmap4_extractor/mpqfile.cpp) | 25 | ||||
| -rw-r--r-- | src/tools/vmap4_extractor/cascfile.h (renamed from src/tools/vmap4_extractor/mpqfile.h) | 11 | ||||
| -rw-r--r-- | src/tools/vmap4_extractor/gameobject_extract.cpp | 14 | ||||
| -rw-r--r-- | src/tools/vmap4_extractor/model.cpp | 8 | ||||
| -rw-r--r-- | src/tools/vmap4_extractor/model.h | 4 | ||||
| -rw-r--r-- | src/tools/vmap4_extractor/modelheaders.h | 2 | ||||
| -rw-r--r-- | src/tools/vmap4_extractor/vmapexport.cpp | 35 | ||||
| -rw-r--r-- | src/tools/vmap4_extractor/wdtfile.cpp | 2 | ||||
| -rw-r--r-- | src/tools/vmap4_extractor/wdtfile.h | 4 | ||||
| -rw-r--r-- | src/tools/vmap4_extractor/wmo.cpp | 10 | ||||
| -rw-r--r-- | src/tools/vmap4_extractor/wmo.h | 6 |
16 files changed, 81 insertions, 90 deletions
diff --git a/src/tools/vmap4_extractor/CMakeLists.txt b/src/tools/vmap4_extractor/CMakeLists.txt index 7c2b29bd9ce..8ef299295f8 100644 --- a/src/tools/vmap4_extractor/CMakeLists.txt +++ b/src/tools/vmap4_extractor/CMakeLists.txt @@ -23,7 +23,8 @@ target_link_libraries(vmap4extractor PUBLIC common casc - bzip2) + bzip2 + extractor_common) CollectIncludeDirectories( ${CMAKE_CURRENT_SOURCE_DIR} diff --git a/src/tools/vmap4_extractor/DB2.cpp b/src/tools/vmap4_extractor/DB2.cpp index 9b672a90860..fca95476edb 100644 --- a/src/tools/vmap4_extractor/DB2.cpp +++ b/src/tools/vmap4_extractor/DB2.cpp @@ -41,7 +41,7 @@ DB2FileLoader::DB2FileLoader() fields = nullptr; } -bool DB2FileLoader::Load(HANDLE db2Handle, DB2Meta const* meta) +bool DB2FileLoader::Load(CASC::FileHandle const& db2Handle, DB2Meta const* meta_) { if (data) { @@ -50,9 +50,9 @@ bool DB2FileLoader::Load(HANDLE db2Handle, DB2Meta const* meta) } DWORD bytesRead = 0; - this->meta = meta; + meta = meta_; std::uint32_t header; - CascReadFile(db2Handle, &header, sizeof(header), &bytesRead); + CASC::ReadFile(db2Handle, &header, sizeof(header), &bytesRead); if (bytesRead != sizeof(header)) // Signature return false; @@ -61,37 +61,37 @@ bool DB2FileLoader::Load(HANDLE db2Handle, DB2Meta const* meta) if (header != 0x35424457) return false; //'WDB5' - CascReadFile(db2Handle, &recordCount, sizeof(recordCount), &bytesRead); + CASC::ReadFile(db2Handle, &recordCount, sizeof(recordCount), &bytesRead); if (bytesRead != sizeof(recordCount)) // Number of records return false; EndianConvert(recordCount); - CascReadFile(db2Handle, &fieldCount, sizeof(fieldCount), &bytesRead); + CASC::ReadFile(db2Handle, &fieldCount, sizeof(fieldCount), &bytesRead); if (bytesRead != sizeof(fieldCount)) // Number of fields return false; EndianConvert(fieldCount); - CascReadFile(db2Handle, &recordSize, sizeof(recordSize), &bytesRead); + CASC::ReadFile(db2Handle, &recordSize, sizeof(recordSize), &bytesRead); if (bytesRead != sizeof(recordSize)) // Size of a record return false; EndianConvert(recordSize); - CascReadFile(db2Handle, &stringSize, sizeof(stringSize), &bytesRead); + CASC::ReadFile(db2Handle, &stringSize, sizeof(stringSize), &bytesRead); if (bytesRead != sizeof(stringSize)) // String size return false; EndianConvert(stringSize); - CascReadFile(db2Handle, &tableHash, sizeof(tableHash), &bytesRead); + CASC::ReadFile(db2Handle, &tableHash, sizeof(tableHash), &bytesRead); if (bytesRead != sizeof(tableHash)) // Table hash return false; EndianConvert(tableHash); - CascReadFile(db2Handle, &layoutHash, sizeof(layoutHash), &bytesRead); + CASC::ReadFile(db2Handle, &layoutHash, sizeof(layoutHash), &bytesRead); if (bytesRead != sizeof(layoutHash)) // Layout hash return false; @@ -100,41 +100,41 @@ bool DB2FileLoader::Load(HANDLE db2Handle, DB2Meta const* meta) EndianConvert(layoutHash); - CascReadFile(db2Handle, &minIndex, sizeof(minIndex), &bytesRead); + CASC::ReadFile(db2Handle, &minIndex, sizeof(minIndex), &bytesRead); if (bytesRead != sizeof(minIndex)) // MinIndex WDB2 return false; EndianConvert(minIndex); - CascReadFile(db2Handle, &maxIndex, sizeof(maxIndex), &bytesRead); + CASC::ReadFile(db2Handle, &maxIndex, sizeof(maxIndex), &bytesRead); if (bytesRead != sizeof(maxIndex)) // MaxIndex WDB2 return false; EndianConvert(maxIndex); - CascReadFile(db2Handle, &localeMask, sizeof(localeMask), &bytesRead); + CASC::ReadFile(db2Handle, &localeMask, sizeof(localeMask), &bytesRead); if (bytesRead != sizeof(localeMask)) // Locales return false; EndianConvert(localeMask); - CascReadFile(db2Handle, ©IdSize, sizeof(copyIdSize), &bytesRead); + CASC::ReadFile(db2Handle, ©IdSize, sizeof(copyIdSize), &bytesRead); if (bytesRead != sizeof(copyIdSize)) return false; EndianConvert(copyIdSize); - CascReadFile(db2Handle, &metaFlags, sizeof(metaFlags), &bytesRead); + CASC::ReadFile(db2Handle, &metaFlags, sizeof(metaFlags), &bytesRead); if (bytesRead != sizeof(metaFlags)) return false; EndianConvert(metaFlags); ASSERT((metaFlags & 0x1) == 0); - ASSERT((meta->IndexField == -1) || (meta->IndexField == (metaFlags >> 16))); + ASSERT((meta->IndexField == -1) || (meta->IndexField == int32((metaFlags >> 16)))); fields = new FieldEntry[fieldCount]; - CascReadFile(db2Handle, fields, fieldCount * sizeof(FieldEntry), &bytesRead); + CASC::ReadFile(db2Handle, fields, fieldCount * sizeof(FieldEntry), &bytesRead); if (bytesRead != fieldCount * sizeof(FieldEntry)) return false; @@ -144,14 +144,14 @@ bool DB2FileLoader::Load(HANDLE db2Handle, DB2Meta const* meta) data = new unsigned char[recordSize * recordCount + stringSize]; stringTable = data + recordSize * recordCount; - CascReadFile(db2Handle, data, recordSize * recordCount + stringSize, &bytesRead); + CASC::ReadFile(db2Handle, data, recordSize * recordCount + stringSize, &bytesRead); if (bytesRead != recordSize * recordCount + stringSize) return false; if (idTableSize) { idTable = new unsigned char[idTableSize]; - CascReadFile(db2Handle, idTable, idTableSize, &bytesRead); + CASC::ReadFile(db2Handle, idTable, idTableSize, &bytesRead); if (bytesRead != idTableSize) return false; } @@ -159,7 +159,7 @@ bool DB2FileLoader::Load(HANDLE db2Handle, DB2Meta const* meta) if (copyIdSize) { copyTable = new unsigned char[copyIdSize]; - CascReadFile(db2Handle, copyTable, copyIdSize, &bytesRead); + CASC::ReadFile(db2Handle, copyTable, copyIdSize, &bytesRead); if (bytesRead != copyIdSize) return false; } diff --git a/src/tools/vmap4_extractor/DB2.h b/src/tools/vmap4_extractor/DB2.h index 1addfa365f7..3d2574b8d4f 100644 --- a/src/tools/vmap4_extractor/DB2.h +++ b/src/tools/vmap4_extractor/DB2.h @@ -22,6 +22,7 @@ #ifdef PLATFORM_WINDOWS #undef PLATFORM_WINDOWS #endif +#include "CascHandles.h" #include "CascLib.h" #include "Utilities/ByteConverter.h" #include "Errors.h" @@ -32,7 +33,7 @@ class DB2FileLoader DB2FileLoader(); ~DB2FileLoader(); - bool Load(HANDLE db2Handle, DB2Meta const* meta); + bool Load(CASC::FileHandle const& db2Handle, DB2Meta const* meta); class Record { diff --git a/src/tools/vmap4_extractor/adtfile.cpp b/src/tools/vmap4_extractor/adtfile.cpp index d87d244247a..f4cb5b686da 100644 --- a/src/tools/vmap4_extractor/adtfile.cpp +++ b/src/tools/vmap4_extractor/adtfile.cpp @@ -77,7 +77,7 @@ char* GetExtension(char* FileName) return NULL; } -extern HANDLE CascStorage; +extern CASC::StorageHandle CascStorage; ADTFile::ADTFile(char* filename) : ADT(CascStorage, filename, false), nWMO(0), nMDX(0) { diff --git a/src/tools/vmap4_extractor/adtfile.h b/src/tools/vmap4_extractor/adtfile.h index 6f929038688..8d666b37686 100644 --- a/src/tools/vmap4_extractor/adtfile.h +++ b/src/tools/vmap4_extractor/adtfile.h @@ -19,7 +19,7 @@ #ifndef ADT_H #define ADT_H -#include "mpqfile.h" +#include "cascfile.h" #include "wmo.h" #include "model.h" @@ -111,7 +111,7 @@ class ADTFile { private: //size_t mcnk_offsets[256], mcnk_sizes[256]; - MPQFile ADT; + CASCFile ADT; //mcell Mcell; std::string Adtfilename; public: diff --git a/src/tools/vmap4_extractor/mpqfile.cpp b/src/tools/vmap4_extractor/cascfile.cpp index 87b0b5b5611..b9074d8696e 100644 --- a/src/tools/vmap4_extractor/mpqfile.cpp +++ b/src/tools/vmap4_extractor/cascfile.cpp @@ -1,15 +1,15 @@ -#include "mpqfile.h" +#include "cascfile.h" #include <deque> #include <cstdio> -MPQFile::MPQFile(HANDLE mpq, const char* filename, bool warnNoExist /*= true*/) : +CASCFile::CASCFile(CASC::StorageHandle const& casc, const char* filename, bool warnNoExist /*= true*/) : eof(false), buffer(0), pointer(0), size(0) { - HANDLE file; - if (!CascOpenFile(mpq, filename, CASC_LOCALE_ALL, 0, &file)) + CASC::FileHandle file = CASC::OpenFile(casc, filename, CASC_LOCALE_ALL, false); + if (!file) { if (warnNoExist || GetLastError() != ERROR_FILE_NOT_FOUND) fprintf(stderr, "Can't open %s, err=%u!\n", filename, GetLastError()); @@ -18,12 +18,11 @@ MPQFile::MPQFile(HANDLE mpq, const char* filename, bool warnNoExist /*= true*/) } DWORD hi = 0; - size = CascGetFileSize(file, &hi); + size = CASC::GetFileSize(file, &hi); if (hi) { fprintf(stderr, "Can't open %s, size[hi] = %u!\n", filename, uint32(hi)); - CascCloseFile(file); eof = true; return; } @@ -31,25 +30,21 @@ MPQFile::MPQFile(HANDLE mpq, const char* filename, bool warnNoExist /*= true*/) if (size <= 1) { fprintf(stderr, "Can't open %s, size = %u!\n", filename, uint32(size)); - CascCloseFile(file); eof = true; return; } DWORD read = 0; buffer = new char[size]; - if (!CascReadFile(file, buffer, size, &read) || size != read) + if (!CASC::ReadFile(file, buffer, size, &read) || size != read) { fprintf(stderr, "Can't read %s, size=%u read=%u!\n", filename, uint32(size), uint32(read)); - CascCloseFile(file); eof = true; return; } - - CascCloseFile(file); } -size_t MPQFile::read(void* dest, size_t bytes) +size_t CASCFile::read(void* dest, size_t bytes) { if (eof) return 0; @@ -66,19 +61,19 @@ size_t MPQFile::read(void* dest, size_t bytes) return bytes; } -void MPQFile::seek(int offset) +void CASCFile::seek(int offset) { pointer = offset; eof = (pointer >= size); } -void MPQFile::seekRelative(int offset) +void CASCFile::seekRelative(int offset) { pointer += offset; eof = (pointer >= size); } -void MPQFile::close() +void CASCFile::close() { if (buffer) delete[] buffer; buffer = 0; diff --git a/src/tools/vmap4_extractor/mpqfile.h b/src/tools/vmap4_extractor/cascfile.h index 4a283e1dd96..882ec116ca5 100644 --- a/src/tools/vmap4_extractor/mpqfile.h +++ b/src/tools/vmap4_extractor/cascfile.h @@ -12,6 +12,7 @@ #include <iostream> #include <deque> #include <cstdint> +#include "CascHandles.h" #include "CascLib.h" typedef int64_t int64; @@ -29,7 +30,7 @@ typedef uint8_t uint8; int GetLastError(); #endif -class MPQFile +class CASCFile { //MPQHANDLE handle; bool eof; @@ -37,12 +38,12 @@ class MPQFile size_t pointer,size; // disable copying - MPQFile(const MPQFile &f); - void operator=(const MPQFile &f); + CASCFile(const CASCFile &f) = delete; + CASCFile& operator=(const CASCFile &f) = delete; public: - MPQFile(HANDLE mpq, const char* filename, bool warnNoExist = true); // filenames are not case sensitive - ~MPQFile() { close(); } + CASCFile(CASC::StorageHandle const& casc, const char* filename, bool warnNoExist = true); // filenames are not case sensitive + ~CASCFile() { close(); } size_t read(void* dest, size_t bytes); size_t getSize() { return size; } size_t getPos() { return pointer; } diff --git a/src/tools/vmap4_extractor/gameobject_extract.cpp b/src/tools/vmap4_extractor/gameobject_extract.cpp index 8577b9c3f98..82c0ab5b1c8 100644 --- a/src/tools/vmap4_extractor/gameobject_extract.cpp +++ b/src/tools/vmap4_extractor/gameobject_extract.cpp @@ -53,7 +53,7 @@ bool ExtractSingleModel(std::string& fname) return mdl.ConvertToVMAPModel(output.c_str()); } -extern HANDLE CascStorage; +extern CASC::StorageHandle CascStorage; struct GameObjectDisplayInfoMeta { @@ -82,13 +82,12 @@ enum ModelTypes : uint32 bool GetHeaderMagic(std::string const& fileName, uint32* magic) { *magic = 0; - HANDLE file; - if (!CascOpenFile(CascStorage, fileName.c_str(), CASC_LOCALE_ALL, 0, &file)) + CASC::FileHandle file = CASC::OpenFile(CascStorage, fileName.c_str(), CASC_LOCALE_ALL); + if (!!file) return false; - std::unique_ptr<HANDLE, CascFileHandleDeleter> modelFile(file); DWORD bytesRead = 0; - if (!CascReadFile(file, magic, 4, &bytesRead) || bytesRead != 4) + if (!CASC::ReadFile(file, magic, 4, &bytesRead) || bytesRead != 4) return false; return true; @@ -97,10 +96,9 @@ bool GetHeaderMagic(std::string const& fileName, uint32* magic) void ExtractGameobjectModels() { printf("Extracting GameObject models..."); - HANDLE dbcFile; - if (!CascOpenFile(CascStorage, "DBFilesClient\\GameObjectDisplayInfo.db2", CASC_LOCALE_NONE, 0, &dbcFile)) + CASC::FileHandle dbcFile = CASC::OpenFile(CascStorage, "DBFilesClient\\GameObjectDisplayInfo.db2", CASC_LOCALE_NONE, true); + if (!dbcFile) { - printf("Fatal error: Cannot find GameObjectDisplayInfo.db2 in archive!\n"); exit(1); } diff --git a/src/tools/vmap4_extractor/model.cpp b/src/tools/vmap4_extractor/model.cpp index 6906f5bed3e..e637d53b173 100644 --- a/src/tools/vmap4_extractor/model.cpp +++ b/src/tools/vmap4_extractor/model.cpp @@ -19,12 +19,12 @@ #include "vmapexport.h" #include "model.h" #include "wmo.h" -#include "mpqfile.h" +#include "cascfile.h" #include <cassert> #include <algorithm> #include <cstdio> -extern HANDLE CascStorage; +extern CASC::StorageHandle CascStorage; Model::Model(std::string &filename) : filename(filename), vertices(0), indices(0) { @@ -33,7 +33,7 @@ Model::Model(std::string &filename) : filename(filename), vertices(0), indices(0 bool Model::open() { - MPQFile f(CascStorage, filename.c_str()); + CASCFile f(CascStorage, filename.c_str()); if (f.isEof()) { @@ -154,7 +154,7 @@ Vec3D fixCoordSystem2(Vec3D v) return Vec3D(v.x, v.z, v.y); } -ModelInstance::ModelInstance(MPQFile& f, char const* ModelInstName, uint32 mapID, uint32 tileX, uint32 tileY, FILE *pDirfile) +ModelInstance::ModelInstance(CASCFile& f, char const* ModelInstName, uint32 mapID, uint32 tileX, uint32 tileY, FILE *pDirfile) : id(0), scale(0), flags(0) { float ff[3]; diff --git a/src/tools/vmap4_extractor/model.h b/src/tools/vmap4_extractor/model.h index 5569093bc5c..a0fd724830d 100644 --- a/src/tools/vmap4_extractor/model.h +++ b/src/tools/vmap4_extractor/model.h @@ -23,7 +23,7 @@ #include "modelheaders.h" #include <vector> -class MPQFile; +class CASCFile; Vec3D fixCoordSystem(Vec3D v); @@ -59,7 +59,7 @@ public: float sc; ModelInstance() : id(0), scale(0), flags(0), sc(0.0f) {} - ModelInstance(MPQFile& f, char const* ModelInstName, uint32 mapID, uint32 tileX, uint32 tileY, FILE* pDirfile); + ModelInstance(CASCFile& f, char const* ModelInstName, uint32 mapID, uint32 tileX, uint32 tileY, FILE* pDirfile); }; diff --git a/src/tools/vmap4_extractor/modelheaders.h b/src/tools/vmap4_extractor/modelheaders.h index cf093e59346..6bb8b2212cb 100644 --- a/src/tools/vmap4_extractor/modelheaders.h +++ b/src/tools/vmap4_extractor/modelheaders.h @@ -19,7 +19,7 @@ #ifndef MODELHEADERS_H #define MODELHEADERS_H -#include "mpqfile.h" // integer typedefs +#include "cascfile.h" // integer typedefs #pragma pack(push,1) diff --git a/src/tools/vmap4_extractor/vmapexport.cpp b/src/tools/vmap4_extractor/vmapexport.cpp index 6eddff40e14..1ec40b7bfd3 100644 --- a/src/tools/vmap4_extractor/vmapexport.cpp +++ b/src/tools/vmap4_extractor/vmapexport.cpp @@ -46,7 +46,7 @@ #include "wdtfile.h" #include "DB2.h" #include "wmo.h" -#include "mpqfile.h" +#include "cascfile.h" #include "vmapexport.h" #include "Banner.h" @@ -60,7 +60,7 @@ //----------------------------------------------------------------------------- -HANDLE CascStorage = NULL; +CASC::StorageHandle CascStorage; typedef struct { @@ -165,8 +165,8 @@ uint32 ReadBuild(int locale) std::string filename = std::string("component.wow-") + localeNames[locale] + ".txt"; //printf("Read %s file... ", filename.c_str()); - HANDLE dbcFile; - if (!CascOpenFile(CascStorage, filename.c_str(), CASC_LOCALE_ALL, 0, &dbcFile)) + CASC::FileHandle dbcFile = CASC::OpenFile(CascStorage, filename.c_str(), CASC_LOCALE_ALL); + if (!dbcFile) { printf("Locale %s not installed.\n", localeNames[locale]); return 0; @@ -174,7 +174,7 @@ uint32 ReadBuild(int locale) char buff[512]; DWORD readBytes = 0; - CascReadFile(dbcFile, buff, 512, &readBytes); + CASC::ReadFile(dbcFile, buff, 512, &readBytes); if (!readBytes) { printf("Fatal error: Not found %s file!\n", filename.c_str()); @@ -182,7 +182,6 @@ uint32 ReadBuild(int locale) } std::string text = std::string(buff, readBytes); - CascCloseFile(dbcFile); size_t pos = text.find("version=\""); size_t pos1 = pos + strlen("version=\""); @@ -210,12 +209,13 @@ bool OpenCascStorage(int locale) try { boost::filesystem::path const storage_dir(boost::filesystem::canonical(input_path) / "Data"); - if (!CascOpenStorage(storage_dir.string().c_str(), WowLocaleToCascLocaleFlags[locale], &CascStorage)) + CascStorage = CASC::OpenStorage(storage_dir, WowLocaleToCascLocaleFlags[locale]); + if (!CascStorage) { - printf("error opening casc storage '%s' locale %s: %s\n", storage_dir.string().c_str(), localeNames[locale], HumanReadableCASCError(GetLastError())); + printf("error opening casc storage '%s' locale %s\n", storage_dir.string().c_str(), localeNames[locale]); return false; } - printf("opened casc storage '%s' locale %s\n", storage_dir.string().c_str(), localeNames[locale]); + return true; } catch (boost::filesystem::filesystem_error& error) @@ -225,7 +225,6 @@ bool OpenCascStorage(int locale) } } - // Local testing functions bool FileExists(const char* file) { @@ -250,10 +249,9 @@ void strToLower(char* str) void ReadLiquidTypeTableDBC() { printf("Read LiquidType.dbc file..."); - HANDLE dbcFile; - if (!CascOpenFile(CascStorage, "DBFilesClient\\LiquidType.db2", CASC_LOCALE_NONE, 0, &dbcFile)) + CASC::FileHandle dbcFile = CASC::OpenFile(CascStorage, "DBFilesClient\\LiquidType.db2", CASC_LOCALE_NONE, true); + if (!dbcFile) { - printf("Fatal error: Cannot find LiquidType.dbc in archive! %s\n", HumanReadableCASCError(GetLastError())); exit(1); } @@ -280,7 +278,6 @@ void ReadLiquidTypeTableDBC() for (uint32 x = 0; x < db2.GetNumRowCopies(); ++x) LiqType[db2.GetRowCopy(x).second] = LiqType[db2.GetRowCopy(x).first]; - CascCloseFile(dbcFile); printf("Done! (" SZFMTD " LiqTypes loaded)\n", LiqType.size()); } @@ -538,7 +535,7 @@ int main(int argc, char ** argv) uint32 build = ReadBuild(i); if (!build) { - CascCloseStorage(CascStorage); + CascStorage.reset(); continue; } @@ -574,10 +571,9 @@ int main(int argc, char ** argv) { printf("Read Map.dbc file... "); - HANDLE dbcFile; - if (!CascOpenFile(CascStorage, "DBFilesClient\\Map.db2", CASC_LOCALE_NONE, 0, &dbcFile)) + CASC::FileHandle dbcFile = CASC::OpenFile(CascStorage, "DBFilesClient\\Map.db2", CASC_LOCALE_NONE, true); + if (!dbcFile) { - printf("Fatal error: Cannot find Map.dbc in archive! %s\n", HumanReadableCASCError(GetLastError())); exit(1); } @@ -624,12 +620,11 @@ int main(int argc, char ** argv) } } - CascCloseFile(dbcFile); printf("Done! (" SZFMTD " maps loaded)\n", map_ids.size()); ParsMapFiles(); } - CascCloseStorage(CascStorage); + CascStorage.reset(); printf("\n"); if (!success) diff --git a/src/tools/vmap4_extractor/wdtfile.cpp b/src/tools/vmap4_extractor/wdtfile.cpp index 3c6b5744cf4..ce2e98886bf 100644 --- a/src/tools/vmap4_extractor/wdtfile.cpp +++ b/src/tools/vmap4_extractor/wdtfile.cpp @@ -30,7 +30,7 @@ char * wdtGetPlainName(char * FileName) return FileName; } -extern HANDLE CascStorage; +extern CASC::StorageHandle CascStorage; WDTFile::WDTFile(char* file_name, char* file_name1):WDT(CascStorage, file_name), gnWMO(0) { diff --git a/src/tools/vmap4_extractor/wdtfile.h b/src/tools/vmap4_extractor/wdtfile.h index 8968ee2dbda..2a7d7df797c 100644 --- a/src/tools/vmap4_extractor/wdtfile.h +++ b/src/tools/vmap4_extractor/wdtfile.h @@ -19,7 +19,7 @@ #ifndef WDTFILE_H #define WDTFILE_H -#include "mpqfile.h" +#include "cascfile.h" #include "wmo.h" #include <string> #include <vector> @@ -30,7 +30,7 @@ class ADTFile; class WDTFile { private: - MPQFile WDT; + CASCFile WDT; std::string filename; public: WDTFile(char* file_name, char* file_name1); diff --git a/src/tools/vmap4_extractor/wmo.cpp b/src/tools/vmap4_extractor/wmo.cpp index edfb3af863f..b538da01d0e 100644 --- a/src/tools/vmap4_extractor/wmo.cpp +++ b/src/tools/vmap4_extractor/wmo.cpp @@ -26,7 +26,7 @@ #include <fstream> #undef min #undef max -#include "mpqfile.h" +#include "cascfile.h" using namespace std; extern std::vector<uint16> LiqType; @@ -39,11 +39,11 @@ WMORoot::WMORoot(std::string &filename) memset(bbcorn2, 0, sizeof(bbcorn2)); } -extern HANDLE CascStorage; +extern CASC::StorageHandle CascStorage; bool WMORoot::open() { - MPQFile f(CascStorage, filename.c_str()); + CASCFile f(CascStorage, filename.c_str()); if(f.isEof ()) { printf("No such file.\n"); @@ -177,7 +177,7 @@ WMOGroup::WMOGroup(const std::string &filename) : bool WMOGroup::open() { - MPQFile f(CascStorage, filename.c_str()); + CASCFile f(CascStorage, filename.c_str()); if(f.isEof ()) { printf("No such file.\n"); @@ -511,7 +511,7 @@ WMOGroup::~WMOGroup() delete [] LiquBytes; } -WMOInstance::WMOInstance(MPQFile& f, char const* WmoInstName, uint32 mapID, uint32 tileX, uint32 tileY, FILE* pDirfile) +WMOInstance::WMOInstance(CASCFile& f, char const* WmoInstName, uint32 mapID, uint32 tileX, uint32 tileY, FILE* pDirfile) : currx(0), curry(0), wmo(NULL), doodadset(0), pos(), indx(0), id(0), d2(0), d3(0) { float ff[3]; diff --git a/src/tools/vmap4_extractor/wmo.h b/src/tools/vmap4_extractor/wmo.h index 22784d54ddf..05bc940042a 100644 --- a/src/tools/vmap4_extractor/wmo.h +++ b/src/tools/vmap4_extractor/wmo.h @@ -25,7 +25,7 @@ #include <set> #include <vector> #include "vec3d.h" -#include "mpqfile.h" +#include "cascfile.h" // MOPY flags #define WMO_MATERIAL_NOCAMCOLLIDE 0x01 @@ -38,7 +38,7 @@ class WMOInstance; class WMOManager; -class MPQFile; +class CASCFile; /* for whatever reason a certain company just can't stick to one coordinate system... */ static inline Vec3D fixCoords(const Vec3D &v){ return Vec3D(v.z, v.x, v.y); } @@ -134,7 +134,7 @@ public: Vec3D pos2, pos3, rot; uint32 indx, id, d2, d3; - WMOInstance(MPQFile&f , char const* WmoInstName, uint32 mapID, uint32 tileX, uint32 tileY, FILE* pDirfile); + WMOInstance(CASCFile&f , char const* WmoInstName, uint32 mapID, uint32 tileX, uint32 tileY, FILE* pDirfile); static void reset(); }; |
