Match MxDSBuffer::CalcBytesRemaining

This commit is contained in:
Christian Semmler 2023-12-26 15:25:35 -05:00
parent f84abd61af
commit 590e378f3a
3 changed files with 27 additions and 24 deletions

View File

@ -451,32 +451,31 @@ void MxDSBuffer::AddRef(MxDSChunk* p_chunk)
MxResult MxDSBuffer::CalcBytesRemaining(MxU8* p_data) MxResult MxDSBuffer::CalcBytesRemaining(MxU8* p_data)
{ {
MxResult result = FAILURE; MxResult result = FAILURE;
MxU8* ptr;
if (m_mode == MxDSBufferType_Allocate && m_bytesRemaining != 0) {
MxU32 bytesRead; MxU32 bytesRead;
if (m_mode == MxDSBufferType_Allocate) { MxU8* ptr;
if (m_bytesRemaining != 0) {
if (m_writeOffset == m_bytesRemaining) { if (m_writeOffset == m_bytesRemaining) {
bytesRead = (*(MxU32*) p_data) + 8; bytesRead = *(MxU32*) (p_data + 4) + 8;
ptr = p_data; ptr = p_data;
} }
else { else {
ptr = &p_data[MxStreamChunk::ReturnE() + 8]; ptr = &p_data[MxStreamChunk::ReturnE() + 8];
bytesRead = (*(MxU32*) p_data) - MxStreamChunk::ReturnE(); bytesRead = (*(MxU32*) (p_data + 4)) - MxStreamChunk::ReturnE();
} }
if (bytesRead <= m_bytesRemaining) { if (bytesRead <= m_bytesRemaining) {
memcpy(m_pBuffer + (m_writeOffset - m_bytesRemaining), ptr, bytesRead); memcpy(m_pBuffer + m_writeOffset - m_bytesRemaining, ptr, bytesRead);
if (m_writeOffset == m_bytesRemaining) {
MxU8* buffer = m_pBuffer; if (m_writeOffset == m_bytesRemaining)
buffer[1] = *MxStreamChunk::ReturnPlus18Ptr((MxU32*) buffer) + MxStreamChunk::ReturnE(); *(MxU32*) (m_pBuffer + 4) = *MxStreamChunk::IntoPlus18(m_pBuffer) + MxStreamChunk::ReturnE();
m_bytesRemaining -= bytesRead;
result = SUCCESS;
}
} }
result = SUCCESS;
m_bytesRemaining = m_bytesRemaining - bytesRead;
}
}
}
return result; return result;
} }

View File

@ -79,3 +79,9 @@ MxU16* MxStreamChunk::IntoFlags(MxU8* p_buffer)
{ {
return (MxU16*) (p_buffer + 8); return (MxU16*) (p_buffer + 8);
} }
// FUNCTION: LEGO1 0x100c31b0
MxU32* MxStreamChunk::IntoPlus18(MxU8* p_buffer)
{
return (MxU32*) (p_buffer + 18);
}

View File

@ -35,6 +35,7 @@ class MxStreamChunk : public MxDSChunk {
void SetBuffer(MxDSBuffer* p_buffer); void SetBuffer(MxDSBuffer* p_buffer);
static MxU16* IntoFlags(MxU8* p_buffer); static MxU16* IntoFlags(MxU8* p_buffer);
static MxU32* IntoPlus18(MxU8* p_buffer);
// FUNCTION: LEGO1 0x100c3190 // FUNCTION: LEGO1 0x100c3190
static MxU32* ReturnPlus10Ptr(MxU32* p_chunk) { return p_chunk + 10; } static MxU32* ReturnPlus10Ptr(MxU32* p_chunk) { return p_chunk + 10; }
@ -42,9 +43,6 @@ class MxStreamChunk : public MxDSChunk {
// FUNCTION: LEGO1 0x100c31a0 // FUNCTION: LEGO1 0x100c31a0
static MxU32* ReturnPlus14Ptr(MxU32* p_chunk) { return p_chunk + 14; } static MxU32* ReturnPlus14Ptr(MxU32* p_chunk) { return p_chunk + 14; }
// FUNCTION: LEGO1 0x100c31b0
static MxU32* ReturnPlus18Ptr(MxU32* p_chunk) { return p_chunk + 18; }
private: private:
MxDSBuffer* m_buffer; // 0x1c MxDSBuffer* m_buffer; // 0x1c
}; };