From bfc6d460a8ae1a6b74b3b131e9748fd9d91a5c73 Mon Sep 17 00:00:00 2001 From: MS Date: Fri, 20 Dec 2024 13:23:24 -0500 Subject: [PATCH] `MxDSBuffer::SkipToData` to 100% (#1245) * MxDSBuffer::SkipToData to 100% * Add blank line --- LEGO1/omni/src/stream/mxdsbuffer.cpp | 39 ++++++++++++++++------------ 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/LEGO1/omni/src/stream/mxdsbuffer.cpp b/LEGO1/omni/src/stream/mxdsbuffer.cpp index b7dca118..44de686b 100644 --- a/LEGO1/omni/src/stream/mxdsbuffer.cpp +++ b/LEGO1/omni/src/stream/mxdsbuffer.cpp @@ -338,42 +338,47 @@ MxCore* MxDSBuffer::ReadChunk(MxDSBuffer* p_buffer, MxU32* p_chunkData, MxU16 p_ } // FUNCTION: LEGO1 0x100c6df0 +// FUNCTION: BETA10 0x10157e0a MxU8* MxDSBuffer::SkipToData() { MxU8* result = NULL; if (m_pIntoBuffer != NULL) { - do { - MxU32* ptr = (MxU32*) m_pIntoBuffer; - switch (*ptr) { - case FOURCC('L', 'I', 'S', 'T'): - case FOURCC('R', 'I', 'F', 'F'): - m_pIntoBuffer = (MxU8*) (ptr + 3); - break; + while (TRUE) { + switch (*(MxU32*) m_pIntoBuffer) { case FOURCC('M', 'x', 'O', 'b'): case FOURCC('M', 'x', 'C', 'h'): result = m_pIntoBuffer; - m_pIntoBuffer = (MxU8*) ((ptr[1] & 1) + ptr[1] + (MxU32) ptr); - m_pIntoBuffer = (MxU8*) ((MxU32*) m_pIntoBuffer + 2); - if (m_pBuffer + (m_writeOffset - 8) < m_pIntoBuffer) { - m_pIntoBuffer2 = result; + m_pIntoBuffer += (*(MxU32*) (m_pIntoBuffer + 4) & 1) + *(MxU32*) (m_pIntoBuffer + 4); + m_pIntoBuffer += 8; + + if (m_pBuffer + m_writeOffset - 8 < m_pIntoBuffer) { m_pIntoBuffer = NULL; - return result; } + goto done; case FOURCC('M', 'x', 'D', 'a'): case FOURCC('M', 'x', 'S', 't'): - m_pIntoBuffer = (MxU8*) (ptr + 2); + m_pIntoBuffer += 8; break; case FOURCC('M', 'x', 'H', 'd'): - m_pIntoBuffer = (MxU8*) ((MxU32) ptr + ptr[1] + 8); + m_pIntoBuffer += *(MxU32*) (m_pIntoBuffer + 4) + 8; + break; + case FOURCC('L', 'I', 'S', 'T'): + case FOURCC('R', 'I', 'F', 'F'): + m_pIntoBuffer += 12; break; default: m_pIntoBuffer = NULL; - m_pIntoBuffer2 = NULL; - return NULL; + result = NULL; + goto done; } - } while (m_pIntoBuffer <= m_pBuffer + (m_writeOffset - 8)); + + if (m_pIntoBuffer > m_pBuffer + m_writeOffset - 8) { + m_pIntoBuffer = NULL; + goto done; + } + } } done: m_pIntoBuffer2 = result;