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 result = FAILURE;
MxU8* ptr;
MxU32 bytesRead;
if (m_mode == MxDSBufferType_Allocate) {
if (m_bytesRemaining != 0) {
if (m_writeOffset == m_bytesRemaining) {
bytesRead = (*(MxU32*) p_data) + 8;
ptr = p_data;
}
else {
ptr = &p_data[MxStreamChunk::ReturnE() + 8];
bytesRead = (*(MxU32*) p_data) - MxStreamChunk::ReturnE();
}
if (m_mode == MxDSBufferType_Allocate && m_bytesRemaining != 0) {
MxU32 bytesRead;
MxU8* ptr;
if (bytesRead <= m_bytesRemaining) {
memcpy(m_pBuffer + (m_writeOffset - m_bytesRemaining), ptr, bytesRead);
if (m_writeOffset == m_bytesRemaining) {
MxU8* buffer = m_pBuffer;
buffer[1] = *MxStreamChunk::ReturnPlus18Ptr((MxU32*) buffer) + MxStreamChunk::ReturnE();
}
if (m_writeOffset == m_bytesRemaining) {
bytesRead = *(MxU32*) (p_data + 4) + 8;
ptr = p_data;
}
else {
ptr = &p_data[MxStreamChunk::ReturnE() + 8];
bytesRead = (*(MxU32*) (p_data + 4)) - MxStreamChunk::ReturnE();
}
result = SUCCESS;
m_bytesRemaining = m_bytesRemaining - bytesRead;
}
if (bytesRead <= m_bytesRemaining) {
memcpy(m_pBuffer + m_writeOffset - m_bytesRemaining, ptr, bytesRead);
if (m_writeOffset == m_bytesRemaining)
*(MxU32*) (m_pBuffer + 4) = *MxStreamChunk::IntoPlus18(m_pBuffer) + MxStreamChunk::ReturnE();
m_bytesRemaining -= bytesRead;
result = SUCCESS;
}
}
return result;
}

View File

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