From d3d065c945cbc1abff508b4d7440ca9836b16815 Mon Sep 17 00:00:00 2001 From: William JCM Date: Thu, 23 Sep 2021 18:24:55 +0200 Subject: [PATCH] StructSerialiser: fix serialisation of array'd structs. Not all of them are generic structs, after all. --- src/UESaveFile/Serialisers/StructSerialiser.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/UESaveFile/Serialisers/StructSerialiser.cpp b/src/UESaveFile/Serialisers/StructSerialiser.cpp index 58d08d4..8ff7d06 100644 --- a/src/UESaveFile/Serialisers/StructSerialiser.cpp +++ b/src/UESaveFile/Serialisers/StructSerialiser.cpp @@ -55,13 +55,19 @@ auto StructSerialiser::deserialise(const std::string& name, const std::string& t } else { for(UnsignedInt i = 0; i < count; i++) { - auto prop = readStructValue(name, item_type, value_length, reader, serialiser); + auto prop = Containers::pointer(); + + prop = serialiser.readItem(reader, item_type, UnsignedLong(-1), name); + + if(!prop) { + prop = readStructValue(name, item_type, value_length, reader, serialiser); + } if(!prop) { return nullptr; } - prop->structGuid = guid; + static_cast(prop.get())->structGuid = guid; arrayAppend(array, std::move(prop)); } @@ -131,8 +137,10 @@ auto StructSerialiser::serialise(Containers::ArrayView return false; } - if(!writeStructValue(struct_prop, bytes_written_here, writer, serialiser)) { - return false; + if(!serialiser.writeItem(prop, struct_prop->structType, bytes_written_here, writer)) { + if(!writeStructValue(struct_prop, bytes_written_here, writer, serialiser)) { + return false; + } } }