diff --git a/deps/ox/src/ox/claw/read.cpp b/deps/ox/src/ox/claw/read.cpp index cd3bd533..3c69dcad 100644 --- a/deps/ox/src/ox/claw/read.cpp +++ b/deps/ox/src/ox/claw/read.cpp @@ -8,7 +8,9 @@ #include "read.hpp" -namespace ox::detail { +namespace ox { + +namespace detail { ValErr readHeader(const char *buff, std::size_t buffLen) noexcept { const auto s1End = ox_strchr(buff, ';', buffLen); @@ -36,6 +38,7 @@ ValErr readHeader(const char *buff, std::size_t buffLen) noexcept { const auto s3Size = s3End - buff; String versionStr(buff, s3Size); buff += s3Size + 1; + buffLen -= s3Size + 1; ClawHeader hdr; if (fmt == "M1") { @@ -48,7 +51,18 @@ ValErr readHeader(const char *buff, std::size_t buffLen) noexcept { hdr.typeName = typeName; hdr.typeVersion = ox_atoi(versionStr.c_str()); hdr.data = buff; + hdr.dataSize = buffLen; return hdr; } } + +ValErr> stripClawHeader(const char *buff, std::size_t buffLen) noexcept { + auto header = detail::readHeader(buff, buffLen); + oxReturnError(header); + Vector out(header.value.dataSize); + ox_memcpy(out.data(), header.value.data, out.size()); + return ox::move(out); +} + +} diff --git a/deps/ox/src/ox/claw/read.hpp b/deps/ox/src/ox/claw/read.hpp index 35fe7989..aa94b25a 100644 --- a/deps/ox/src/ox/claw/read.hpp +++ b/deps/ox/src/ox/claw/read.hpp @@ -24,14 +24,17 @@ struct ClawHeader { int typeVersion = -1; ClawFormat fmt = ClawFormat::None; const char *data = nullptr; + std::size_t dataSize = 0; }; -ValErr readHeader(const char *buff, std::size_t buffLen) noexcept; +[[nodiscard]] ValErr readHeader(const char *buff, std::size_t buffLen) noexcept; } +[[nodiscard]] ValErr> stripClawHeader(const char *buff, std::size_t buffLen) noexcept; + template -Error readClaw(char *buff, std::size_t buffLen, T *val) { +[[nodiscard]] Error readClaw(char *buff, std::size_t buffLen, T *val) { auto header = detail::readHeader(buff, buffLen); oxReturnError(header); switch (header.value.fmt) {