Fix counting padding for root struct even when root struct has no properties

This commit is contained in:
Jan 2022-03-22 16:15:42 +01:00
parent f236d285b6
commit 2e5405deb5
4 changed files with 14 additions and 4 deletions

View File

@ -116,11 +116,15 @@ namespace sdd::def_scope_sequences
if (newStructPtr->m_name == "root") if (newStructPtr->m_name == "root")
{ {
state->m_current_struct_padding_offset = 64u; state->m_current_struct_padding_offset = 64u;
state->m_current_struct_is_root = true;
state->m_current_def->m_root_type = CommonStructuredDataType(CommonStructuredDataTypeCategory::STRUCT, newStructIndex); state->m_current_def->m_root_type = CommonStructuredDataType(CommonStructuredDataTypeCategory::STRUCT, newStructIndex);
} }
else else
{
state->m_current_struct_is_root = false;
state->m_current_struct_padding_offset = 0; state->m_current_struct_padding_offset = 0;
} }
}
}; };
class SequenceChecksumOverride final : public StructuredDataDefParser::sequence_t class SequenceChecksumOverride final : public StructuredDataDefParser::sequence_t

View File

@ -232,8 +232,13 @@ namespace sdd::struct_scope_sequences
{ {
assert(state->m_current_struct != nullptr); assert(state->m_current_struct != nullptr);
// Only include root struct offset of 8 byte when root struct is not empty
if (state->m_current_struct_is_root && state->m_current_struct->m_properties.empty())
state->m_current_struct_padding_offset -= 64u;
state->m_current_struct->m_size_in_byte = utils::Align(state->m_current_struct_padding_offset, 8u) / 8; state->m_current_struct->m_size_in_byte = utils::Align(state->m_current_struct_padding_offset, 8u) / 8;
state->m_current_struct_padding_offset = 0u; state->m_current_struct_padding_offset = 0u;
state->m_current_struct_is_root = false;
state->m_current_struct = nullptr; state->m_current_struct = nullptr;
} }
}; };

View File

@ -31,6 +31,7 @@ namespace sdd
CommonStructuredDataEnum* m_current_enum; CommonStructuredDataEnum* m_current_enum;
CommonStructuredDataStruct* m_current_struct; CommonStructuredDataStruct* m_current_struct;
bool m_current_struct_is_root;
size_t m_current_struct_padding_offset; size_t m_current_struct_padding_offset;
size_t m_checksum_override_value; size_t m_checksum_override_value;