mirror of
https://github.com/isledecomp/isle.git
synced 2026-01-27 18:21:15 +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 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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);
|
||||||
|
}
|
||||||
|
|||||||
@ -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
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user