diff --git a/src/core/FileScanner.cpp b/src/core/FileScanner.cpp index 58585dd19e..7e20b7895c 100644 --- a/src/core/FileScanner.cpp +++ b/src/core/FileScanner.cpp @@ -101,7 +101,11 @@ public: ~FileScannerBase() override { Memory::Free(_rootPath); - Memory::FreeArray(_patterns, _numPatterns); + for (size_t i = 0; i < _numPatterns; i++) + { + Memory::Free(_patterns[i]); + } + Memory::Free(_patterns); Memory::Free(_currentPath); Memory::Free(_currentFileInfo); } @@ -311,7 +315,9 @@ protected: DirectoryChild child = CreateChild(path, node); children.push_back(child); } + free(namelist[i]); } + free(namelist); } } diff --git a/src/core/IStream.cpp b/src/core/IStream.cpp index b4260fb853..423b41df59 100644 --- a/src/core/IStream.cpp +++ b/src/core/IStream.cpp @@ -35,6 +35,21 @@ utf8 * IStream::ReadString() return resultString; } +std::string IStream::ReadStdString() +{ + std::vector result; + + uint8 ch; + while ((ch = ReadValue()) != 0) + { + result.push_back(ch); + } + result.push_back(0); + + std::string resultString(result.data(), result.data() + result.size()); + return resultString; +} + void IStream::WriteString(const utf8 * str) { if (str == nullptr) diff --git a/src/core/IStream.hpp b/src/core/IStream.hpp index 6666a693ac..ac49112b46 100644 --- a/src/core/IStream.hpp +++ b/src/core/IStream.hpp @@ -107,6 +107,7 @@ interface IStream } utf8 * ReadString(); + std::string ReadStdString(); void WriteString(const utf8 * str); void WriteString(const std::string &string); }; diff --git a/src/ride/TrackDesignRepository.cpp b/src/ride/TrackDesignRepository.cpp index 7e42110be2..28238be952 100644 --- a/src/ride/TrackDesignRepository.cpp +++ b/src/ride/TrackDesignRepository.cpp @@ -284,10 +284,10 @@ private: for (uint32 i = 0; i < header.NumItems; i++) { TrackRepositoryItem item; - item.Name = fs.ReadString(); - item.Path = fs.ReadString(); + item.Name = fs.ReadStdString(); + item.Path = fs.ReadStdString(); item.RideType = fs.ReadValue(); - item.ObjectEntry = fs.ReadString(); + item.ObjectEntry = fs.ReadStdString(); item.Flags = fs.ReadValue(); _items.push_back(item); } diff --git a/src/windows/tooltip.c b/src/windows/tooltip.c index e2232a6c38..eb1b35f778 100644 --- a/src/windows/tooltip.c +++ b/src/windows/tooltip.c @@ -64,7 +64,7 @@ static rct_window_event_list window_tooltip_events = { NULL }; -static utf8 _tooltipText[512]; +static utf8 _tooltipText[sizeof(gCommonStringFormatBuffer)]; static sint16 _tooltipNumLines; void window_tooltip_reset(int x, int y)