Author: greatlrd
Date: Tue Sep 26 03:46:32 2006
New Revision: 24273
URL:
http://svn.reactos.org/svn/reactos?rev=24273&view=rev
Log:
fixed overlaping memory problem with RtlMoveMemory. The rewrite of RtlMoveMemory did not
handling overlaping memory. it shows with ntdll_winetest rtl, use the old asm version from
the string.a instead
Added:
trunk/reactos/lib/rtl/RtlMoveMemory.c (with props)
Modified:
trunk/reactos/lib/rtl/i386/rtlmem.s
trunk/reactos/lib/rtl/rtl.rbuild
Added: trunk/reactos/lib/rtl/RtlMoveMemory.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/RtlMoveMemory.c?re…
==============================================================================
--- trunk/reactos/lib/rtl/RtlMoveMemory.c (added)
+++ trunk/reactos/lib/rtl/RtlMoveMemory.c Tue Sep 26 03:46:32 2006
@@ -1,0 +1,23 @@
+#include <rtl.h>
+
+#define NDEBUG
+#include <debug.h>
+
+#undef RtlMoveMemory
+/*
+ * @implemented
+ */
+VOID
+NTAPI
+RtlMoveMemory (
+ PVOID Destination,
+ CONST VOID * Source,
+ ULONG Length
+)
+{
+ memmove (
+ Destination,
+ Source,
+ Length
+ );
+}
Propchange: trunk/reactos/lib/rtl/RtlMoveMemory.c
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/reactos/lib/rtl/i386/rtlmem.s
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/i386/rtlmem.s?rev=…
==============================================================================
--- trunk/reactos/lib/rtl/i386/rtlmem.s (original)
+++ trunk/reactos/lib/rtl/i386/rtlmem.s Tue Sep 26 03:46:32 2006
@@ -214,73 +214,6 @@
ret 8
.endfunc
-.func RtlMoveMemory@12
-_RtlMoveMemory@12:
-
- /* Save volatiles */
- push esi
- push edi
-
- /* Get pointers and size */
- mov esi, [esp+16]
- mov edi, [esp+12]
- mov ecx, [esp+20]
- cld
-
- /* Check if the destination is higher (or equal) */
- cmp esi, edi
- jbe Overlap
-
- /* Set ULONG size and UCHAR remainder */
-DoMove:
- mov edx, ecx
- and edx, 3
- shr ecx, 2
-
- /* Do the move */
- rep movsd
- or ecx, edx
- jnz ByteMove
-
- /* Return */
- pop edi
- pop esi
- ret 12
-
-ByteMove:
- /* Move what's left */
- rep stosb
-
-DoneMove:
- /* Restore volatiles */
- pop edi
- pop esi
- ret 12
-
-Overlap:
- /* Don't copy if they're equal */
- jz DoneMove
-
- /* Compare pointer distance with given length and check for overlap */
- mov eax, edi
- sub eax, esi
- cmp ecx, eax
- jbe DoMove
-
- /* Set direction flag for backward move */
- std
-
- /* Copy byte-by-byte the non-overlapping distance */
- add esi, ecx
- add edi, ecx
- dec esi
- dec edi
-
- /* Do the move, reset flag and return */
- rep movsb
- cld
- jmp DoneMove
-.endfunc
.func @RtlPrefetchMemoryNonTemporal@8, @RtlPrefetchMemoryNonTemporal@8
@RtlPrefetchMemoryNonTemporal@8:
Modified: trunk/reactos/lib/rtl/rtl.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/rtl.rbuild?rev=242…
==============================================================================
--- trunk/reactos/lib/rtl/rtl.rbuild (original)
+++ trunk/reactos/lib/rtl/rtl.rbuild Tue Sep 26 03:46:32 2006
@@ -39,6 +39,7 @@
<file>sqrt_asm.s</file>
<file>tan_asm.s</file>
</directory>
+ <file>RtlMoveMemory.c</file>
</if>
<ifnot property="ARCH" value="i386">