mirror of
https://github.com/isledecomp/isle.git
synced 2025-10-23 08:24:16 +00:00
MxDSBuffer::ParseChunk
to 100% (#1257)
* MxDSBuffer::ParseChunk to 100% * Restore SUCCESS tests
This commit is contained in:
@@ -13,12 +13,13 @@
|
||||
DECOMP_SIZE_ASSERT(MxDSBuffer, 0x34);
|
||||
|
||||
// FUNCTION: LEGO1 0x100c6470
|
||||
// FUNCTION: BETA10 0x10156f00
|
||||
MxDSBuffer::MxDSBuffer()
|
||||
{
|
||||
m_referenceCount = 0;
|
||||
m_pBuffer = NULL;
|
||||
m_pIntoBuffer = NULL;
|
||||
m_pIntoBuffer2 = NULL;
|
||||
m_referenceCount = 0;
|
||||
m_unk0x14 = 0;
|
||||
m_unk0x18 = 0;
|
||||
m_unk0x1c = 0;
|
||||
@@ -29,6 +30,7 @@ MxDSBuffer::MxDSBuffer()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100c6530
|
||||
// FUNCTION: BETA10 0x10156ff7
|
||||
MxDSBuffer::~MxDSBuffer()
|
||||
{
|
||||
assert(m_referenceCount == 0);
|
||||
@@ -54,6 +56,7 @@ MxDSBuffer::~MxDSBuffer()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100c6640
|
||||
// FUNCTION: BETA10 0x10157146
|
||||
MxResult MxDSBuffer::AllocateBuffer(MxU32 p_bufferSize, Type p_mode)
|
||||
{
|
||||
MxResult result = FAILURE;
|
||||
@@ -233,6 +236,7 @@ MxResult MxDSBuffer::StartPresenterFromAction(
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100c6a50
|
||||
// FUNCTION: BETA10 0x10157795
|
||||
MxResult MxDSBuffer::ParseChunk(
|
||||
MxStreamController* p_controller,
|
||||
MxU32* p_data,
|
||||
@@ -254,26 +258,19 @@ MxResult MxDSBuffer::ParseChunk(
|
||||
MxU32 length = p_header->GetLength() + MxDSChunk::GetHeaderSize() + 8;
|
||||
MxDSBuffer* buffer = new MxDSBuffer();
|
||||
|
||||
if (buffer && buffer->AllocateBuffer(length, e_allocate) == SUCCESS &&
|
||||
buffer->CalcBytesRemaining((MxU8*) p_data) == SUCCESS) {
|
||||
*p_streamingAction = new MxDSStreamingAction((MxDSStreamingAction&) *p_action);
|
||||
|
||||
if (*p_streamingAction) {
|
||||
MxU16* flags = MxStreamChunk::IntoFlags(buffer->GetBuffer());
|
||||
*flags = p_header->GetChunkFlags() & ~DS_CHUNK_SPLIT;
|
||||
|
||||
delete p_header;
|
||||
(*p_streamingAction)->SetUnknowna0(buffer);
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
||||
if (buffer) {
|
||||
if (!buffer || buffer->AllocateBuffer(length, e_allocate) != SUCCESS ||
|
||||
buffer->CalcBytesRemaining((MxU8*) p_data) != SUCCESS ||
|
||||
(*p_streamingAction = new MxDSStreamingAction((MxDSStreamingAction&) *p_action)) == NULL) {
|
||||
delete buffer;
|
||||
delete p_header;
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
MxU16* flags = MxStreamChunk::IntoFlags(buffer->GetBuffer());
|
||||
*flags = p_header->GetChunkFlags() & ~DS_CHUNK_SPLIT;
|
||||
|
||||
delete p_header;
|
||||
return FAILURE;
|
||||
(*p_streamingAction)->SetUnknowna0(buffer);
|
||||
}
|
||||
else {
|
||||
if (p_header->GetChunkFlags() & DS_CHUNK_END_OF_STREAM) {
|
||||
@@ -317,7 +314,6 @@ MxResult MxDSBuffer::ParseChunk(
|
||||
}
|
||||
}
|
||||
|
||||
done:
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@@ -3,16 +3,18 @@
|
||||
DECOMP_SIZE_ASSERT(MxDSChunk, 0x1c);
|
||||
|
||||
// FUNCTION: LEGO1 0x100be050
|
||||
// FUNCTION: BETA10 0x10147290
|
||||
MxDSChunk::MxDSChunk()
|
||||
{
|
||||
m_flags = 0;
|
||||
m_data = NULL;
|
||||
m_flags = 0;
|
||||
m_objectId = -1;
|
||||
m_time = 0;
|
||||
m_length = 0;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100be170
|
||||
// FUNCTION: BETA10 0x10147330
|
||||
MxDSChunk::~MxDSChunk()
|
||||
{
|
||||
if (m_flags & DS_CHUNK_BIT1) {
|
||||
@@ -21,6 +23,7 @@ MxDSChunk::~MxDSChunk()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100be1e0
|
||||
// FUNCTION: BETA10 0x101473c5
|
||||
MxU32 MxDSChunk::GetHeaderSize()
|
||||
{
|
||||
return 0x0e;
|
||||
|
@@ -57,6 +57,7 @@ MxU32 MxStreamChunk::ReadChunkHeader(MxU8* p_chunkData)
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100c30e0
|
||||
// FUNCTION: BETA10 0x10151517
|
||||
MxResult MxStreamChunk::SendChunk(MxStreamListMxDSSubscriber& p_subscriberList, MxBool p_append, MxS16 p_obj24val)
|
||||
{
|
||||
for (MxStreamListMxDSSubscriber::iterator it = p_subscriberList.begin(); it != p_subscriberList.end(); it++) {
|
||||
@@ -82,6 +83,7 @@ void MxStreamChunk::SetBuffer(MxDSBuffer* p_buffer)
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100c3180
|
||||
// FUNCTION: BETA10 0x101515f1
|
||||
MxU16* MxStreamChunk::IntoFlags(MxU8* p_buffer)
|
||||
{
|
||||
return (MxU16*) (p_buffer + 0x08);
|
||||
|
Reference in New Issue
Block a user