mirror of
https://github.com/isledecomp/isle.git
synced 2026-01-24 08:41:16 +00:00
Match MxDSBuffer::CalcBytesRemaining
This commit is contained in:
parent
f84abd61af
commit
590e378f3a
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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
|
||||
};
|
||||
|
||||
Loading…
Reference in New Issue
Block a user