diff options
| author | Mikhail Redko <ovitnez@gmail.com> | 2016-10-23 23:44:07 +0300 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2016-10-23 22:44:07 +0200 |
| commit | 3d7a86bf1e7596b040ebaada23d377368096da0f (patch) | |
| tree | 749e07e82133a4e8615359c13bd7433dff70384c | |
| parent | cdc5a36dbb8c3498fcdab43ce568548d3b60ccfa (diff) | |
Tools/VMAPs: Fix extractor crash when some .mpq files does not exist (#18130)
| -rw-r--r-- | src/tools/vmap4_extractor/mpq_libmpq.cpp | 6 | ||||
| -rw-r--r-- | src/tools/vmap4_extractor/mpq_libmpq04.h | 12 |
2 files changed, 10 insertions, 8 deletions
diff --git a/src/tools/vmap4_extractor/mpq_libmpq.cpp b/src/tools/vmap4_extractor/mpq_libmpq.cpp index 690600867d9..f106f96f5ec 100644 --- a/src/tools/vmap4_extractor/mpq_libmpq.cpp +++ b/src/tools/vmap4_extractor/mpq_libmpq.cpp @@ -19,6 +19,7 @@ #include "mpq_libmpq04.h" #include <deque> #include <cstdio> +#include <algorithm> ArchiveSet gOpenArchives; @@ -52,6 +53,11 @@ MPQArchive::MPQArchive(const char* filename) gOpenArchives.push_front(this); } +bool MPQArchive::isOpened() const +{ + return std::find(gOpenArchives.begin(), gOpenArchives.end(), this) != gOpenArchives.end(); +} + void MPQArchive::close() { //gOpenArchives.erase(erase(&mpq_a); diff --git a/src/tools/vmap4_extractor/mpq_libmpq04.h b/src/tools/vmap4_extractor/mpq_libmpq04.h index 97b77d4643b..f4a9d2aa596 100644 --- a/src/tools/vmap4_extractor/mpq_libmpq04.h +++ b/src/tools/vmap4_extractor/mpq_libmpq04.h @@ -34,7 +34,7 @@ public: mpq_archive_s *mpq_a; MPQArchive(const char* filename); - ~MPQArchive() { close(); } + ~MPQArchive() { if (isOpened()) close(); } void GetFileListTo(std::vector<std::string>& filelist) { uint32_t filenum; @@ -66,6 +66,7 @@ public: private: void close(); + bool isOpened() const; }; typedef std::deque<MPQArchive*> ArchiveSet; @@ -95,13 +96,8 @@ public: inline void flipcc(char *fcc) { - char t; - t=fcc[0]; - fcc[0]=fcc[3]; - fcc[3]=t; - t=fcc[1]; - fcc[1]=fcc[2]; - fcc[2]=t; + std::swap(fcc[0], fcc[3]); + std::swap(fcc[1], fcc[2]); } #endif |
