diff --git a/deps/ox/src/ox/mc/intops.hpp b/deps/ox/src/ox/mc/intops.hpp index a4e03b5b..7ff41694 100644 --- a/deps/ox/src/ox/mc/intops.hpp +++ b/deps/ox/src/ox/mc/intops.hpp @@ -125,12 +125,12 @@ template if (bytes == 9) { *bytesRead = bytes; I out = 0; - ox_memcpy(&out, &buff[1], sizeof(I)); + memcpy(&out, &buff[1], sizeof(I)); return {LittleEndian(out), OxError(0)}; } else if (buffLen >= bytes) { *bytesRead = bytes; uint64_t decoded = 0; - ox_memcpy(&decoded, &buff[0], bytes); + memcpy(&decoded, &buff[0], bytes); decoded >>= bytes; auto out = static_cast(decoded); // move sign bit @@ -142,7 +142,7 @@ template decoded &= uint64_t(~0) ^ (uint64_t(1) << valBits); // set sign decoded |= sign << (Bits - 1); - ox_memcpy(&out, &decoded, sizeof(out)); + memcpy(&out, &decoded, sizeof(out)); } return {out, OxError(0)}; } diff --git a/deps/ox/src/ox/mc/read.cpp b/deps/ox/src/ox/mc/read.cpp index 3aba33e5..d6d472a8 100644 --- a/deps/ox/src/ox/mc/read.cpp +++ b/deps/ox/src/ox/mc/read.cpp @@ -63,7 +63,7 @@ Error MetalClawReader::field(const char*, uint64_t *val) { Error MetalClawReader::field(const char*, bool *val) { auto valErr = m_fieldPresence.get(m_field++); *val = valErr.value; - return OxError(valErr.error); + return valErr.error; } Error MetalClawReader::field(const char*, SerStr val) { @@ -94,7 +94,7 @@ Error MetalClawReader::field(const char*, SerStr val) { return OxError(0); } -[[nodiscard]] ArrayLength MetalClawReader::arrayLength(bool pass) { +[[nodiscard]] ValErr MetalClawReader::arrayLength(bool pass) { std::size_t len = 0; if (m_fieldPresence.get(m_field)) { // read the length @@ -102,7 +102,7 @@ Error MetalClawReader::field(const char*, SerStr val) { return OxError(MC_BUFFENDED); } std::size_t bytesRead = 0; - len = mc::decodeInteger(&m_buff[m_buffIt], m_buffLen - m_buffIt, &bytesRead).value; + len = mc::decodeInteger(&m_buff[m_buffIt], m_buffLen - m_buffIt, &bytesRead).value; if (pass) { m_buffIt += sizeof(ArrayLength); } diff --git a/deps/ox/src/ox/mc/read.hpp b/deps/ox/src/ox/mc/read.hpp index 96585a37..501f9dfa 100644 --- a/deps/ox/src/ox/mc/read.hpp +++ b/deps/ox/src/ox/mc/read.hpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include "err.hpp" @@ -68,7 +69,7 @@ class MetalClawReader { * Reads an array length from the current location in the buffer. * @param pass indicates that the parsing should iterate past the array length */ - [[nodiscard]] ArrayLength arrayLength(bool pass = true); + [[nodiscard]] ValErr arrayLength(bool pass = true); /** * Reads an string length from the current location in the buffer. @@ -106,12 +107,11 @@ class MetalClawReader { template Error MetalClawReader::field(const char*, T *val) { - auto err = OxError(0); if (val && m_fieldPresence.get(m_field++)) { auto reader = child(); - err |= model(&reader, val); + oxReturnError(model(&reader, val)); } - return err; + return OxError(0); } template @@ -138,8 +138,7 @@ Error MetalClawReader::readInteger(I *val) { // array handler template -Error MetalClawReader::field(const char*, T *val, std::size_t valLen) { - auto err = OxError(0); +Error MetalClawReader::field(const char *name, T *val, std::size_t valLen) { if (m_fieldPresence.get(m_field++)) { // read the length if (m_buffIt >= m_buffLen) { @@ -155,18 +154,22 @@ Error MetalClawReader::field(const char*, T *val, std::size_t valLen) { auto reader = child(); reader.setTypeInfo("List", len.value); for (std::size_t i = 0; i < len.value; i++) { - err |= reader.field("", &val[i]); + oxReturnError(reader.field("", &val[i])); } } else { - err = OxError(MC_OUTBUFFENDED); + oxTrace("ox::mc::read::field(T)") << name << ", size:" << valLen; + return OxError(MC_OUTBUFFENDED); } } - return err; + return OxError(0); } template -Error MetalClawReader::field(const char*, ox::Vector *val) { - return field(nullptr, val->data(), val->size()); +Error MetalClawReader::field(const char* name, ox::Vector *val) { + const auto [len, err] = arrayLength(false); + oxReturnError(err); + val->resize(len); + return field(name, val->data(), val->size()); } template diff --git a/deps/ox/src/ox/model/walk.hpp b/deps/ox/src/ox/model/walk.hpp index 3aaf2ce4..79b9ffb8 100644 --- a/deps/ox/src/ox/model/walk.hpp +++ b/deps/ox/src/ox/model/walk.hpp @@ -86,7 +86,8 @@ static ox::Error parseField(const DescriptorField &field, Reader *rdr, DataWalke walker->pushNamePath(field.fieldName); if (field.subscriptLevels) { // add array handling - const auto arrayLen = rdr->arrayLength(true); + const auto [arrayLen, err] = rdr->arrayLength(true); + oxReturnError(err); auto child = rdr->child(); child.setTypeInfo(field.fieldName.c_str(), arrayLen); DescriptorField f(field); // create mutable copy