@@ -125,8 +125,7 @@ void SetPtrHelper(unsigned long addr, unsigned long ptr)
125125void CPointer::SetPtr (object oPtr, int iOffset /* = 0 */ )
126126{
127127 Validate ();
128- CPointer* pPtr = ExtractPointer (oPtr);
129- SetPtrHelper (m_ulAddr + iOffset, pPtr->m_ulAddr );
128+ SetPtrHelper (m_ulAddr + iOffset, ExtractAddress (oPtr));
130129}
131130
132131int CompareHelper (void * first, void * second, unsigned long length)
@@ -140,18 +139,16 @@ int CompareHelper(void* first, void* second, unsigned long length)
140139int CPointer::Compare (object oOther, unsigned long ulNum)
141140{
142141 Validate ();
143- CPointer* pOther = ExtractPointer (oOther);
144- pOther->Validate ();
145- return CompareHelper ((void *) m_ulAddr, (void *) pOther->m_ulAddr , ulNum);
142+ return CompareHelper ((void *) m_ulAddr, (void *) ExtractAddress (oOther, true ), ulNum);
146143}
147144
148145bool CPointer::IsOverlapping (object oOther, unsigned long ulNumBytes)
149146{
150- CPointer* pOther = ExtractPointer (oOther);
151- if (m_ulAddr <= pOther-> m_ulAddr )
152- return m_ulAddr + ulNumBytes > pOther-> m_ulAddr ;
153-
154- return pOther-> m_ulAddr + ulNumBytes > m_ulAddr;
147+ unsigned long ulOther = ExtractAddress (oOther);
148+ if (m_ulAddr <= ulOther )
149+ return m_ulAddr + ulNumBytes > ulOther ;
150+
151+ return ulOther + ulNumBytes > m_ulAddr;
155152}
156153
157154void * SearchBytesHelper (unsigned char * base, unsigned char * end, unsigned char * bytes, unsigned long length)
@@ -208,13 +205,10 @@ void CPointer::Copy(object oDest, unsigned long ulNumBytes)
208205 BOOST_RAISE_EXCEPTION (PyExc_ValueError, " 'num_bytes' must be greater than 0." )
209206 }
210207
211- CPointer* pDest = ExtractPointer (oDest);
212- pDest->Validate ();
213-
214208 if (IsOverlapping (oDest, ulNumBytes))
215209 BOOST_RAISE_EXCEPTION (PyExc_ValueError, " Pointers are overlapping!" )
216210
217- CopyHelper ((void *) pDest-> m_ulAddr , (void *) m_ulAddr, ulNumBytes);
211+ CopyHelper ((void *) ExtractAddress (oDest, true ) , (void *) m_ulAddr, ulNumBytes);
218212}
219213
220214void MoveHelper (void * dest, void * source, unsigned long length)
@@ -231,9 +225,7 @@ void CPointer::Move(object oDest, unsigned long ulNumBytes)
231225 BOOST_RAISE_EXCEPTION (PyExc_ValueError, " 'num_bytes' must be greater than 0." )
232226 }
233227
234- CPointer* pDest = ExtractPointer (oDest);
235- pDest->Validate ();
236- MoveHelper ((void *) pDest->m_ulAddr , (void *) m_ulAddr, ulNumBytes);
228+ MoveHelper ((void *) ExtractAddress (oDest, true ), (void *) m_ulAddr, ulNumBytes);
237229}
238230
239231unsigned long GetVirtualFuncHelper (unsigned long addr, int index)
0 commit comments