From a7c4c04e5ae800ceb0c46a75ee4839ff9a6cd449 Mon Sep 17 00:00:00 2001 From: IntelligentQuantum Date: Sun, 2 Oct 2022 00:13:06 +0330 Subject: [PATCH] fix(Tools/vmaps): Fix extractor crash when some .mpq files does not exist (#11976) * . * Clion event trace * . --- src/tools/vmap4_extractor/mpq_libmpq.cpp | 6 ++++++ src/tools/vmap4_extractor/mpq_libmpq04.h | 15 +++++++-------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/tools/vmap4_extractor/mpq_libmpq.cpp b/src/tools/vmap4_extractor/mpq_libmpq.cpp index d074fd3d2..f52d5b3a6 100644 --- a/src/tools/vmap4_extractor/mpq_libmpq.cpp +++ b/src/tools/vmap4_extractor/mpq_libmpq.cpp @@ -18,6 +18,7 @@ #include "mpq_libmpq04.h" #include #include +#include ArchiveSet gOpenArchives; @@ -53,6 +54,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 5e57d9a5a..0530a31f3 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); - void close(); + ~MPQArchive() { if (isOpened()) close(); } void GetFileListTo(vector& filelist) { @@ -65,6 +65,10 @@ public: delete[] buffer; } + +private: + void close(); + bool isOpened() const; }; typedef std::deque ArchiveSet; @@ -95,13 +99,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