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); }