diff --git a/deps/ox/src/ox/preloader/preloader.hpp b/deps/ox/src/ox/preloader/preloader.hpp index 76fdcf9c..1def42d8 100644 --- a/deps/ox/src/ox/preloader/preloader.hpp +++ b/deps/ox/src/ox/preloader/preloader.hpp @@ -175,15 +175,20 @@ constexpr ox::Error Preloader::field(CRStringView, const ox::BasicStri } using VecMap = ox::VectorMemMap; const auto sz = val->bytes(); - oxRequire(a, ox::allocate(&m_writer, sz)); - const VecMap vecVal{ + VecMap vecVal{ .smallVecSize = SmallStringSize, .size = PlatSpec::correctEndianness(static_cast(sz)), .cap = PlatSpec::correctEndianness(static_cast(sz)), - .items = sz ? PlatSpec::correctEndianness(static_cast(a) + PlatSpec::RomStart) : 0, }; oxReturnError(pad(&vecVal)); const auto restore = m_writer.tellp(); + std::size_t a = 0; + if (sz && sz >= SmallStringSize) { + oxReturnError(ox::allocate(&m_writer, sz).moveTo(&a)); + } else { + a = restore; + } + vecVal.items = sz ? PlatSpec::correctEndianness(static_cast(a) + PlatSpec::RomStart) : 0; oxReturnError(m_writer.seekp(a)); oxReturnError(m_writer.write(val->data(), sz)); oxReturnError(m_writer.seekp(restore));