83{
84
85 auto oldBuffer3 = m_Buffer3;
86 auto newBuffer3 = m_Buffer3 + dataSize;
87
88 if ( m_DataEnd <= newBuffer3 && newBuffer3 != m_DataEnd )
89 {
90 newBuffer3 = m_DataEnd;
91 }
92
93 m_Buffer3 = newBuffer3;
94
95 if ( m_MaxOffset < static_cast<uintptr_t>( m_Buffer3 - m_Buffer2 ) )
96 {
97 m_Buffer2 = m_Buffer3 - m_MaxOffset;
98
99 for (
TSIZE i = 0; i < 256; i++ )
100 {
101 if ( m_Offsets[ i ] < m_Buffer2 )
102 {
103 m_Offsets[ i ] =
TNULL;
104 }
105 }
106
107 auto node = m_Root2.m_Ptr1;
108 while ( node != &m_Root2 )
109 {
110 if ( m_Buffer2 <= node->m_Unk3 ) break;
111 auto nextNode = node->m_Ptr1;
112
113 node->m_Unk1->m_Unk2 = node->m_Unk2;
114 node->m_Unk2->m_Unk1 = node->m_Unk1;
115 node->m_Unk1 = node;
116 node->m_Unk2 = node;
117 node->m_Ptr1->m_Ptr2 = node->m_Ptr2;
118 node->m_Ptr2->m_Ptr1 = node->m_Ptr1;
119 node->m_Ptr1 = &m_Root1;
120 node->m_Ptr2 = m_Root1.m_Ptr2;
121 m_Root1.m_Ptr2 = node;
122 node->m_Ptr2->m_Ptr1 = node;
123
124 node = nextNode;
125 }
126 }
127
128 while ( oldBuffer3 < m_Buffer3 )
129 {
131 oldBuffer3++;
132 }
133}
void AllocSubstring(TBYTE *buffer)