diff options
author | Anish Athalye <[email protected]> | 2019-10-08 21:24:03 -0400 |
---|---|---|
committer | Anish Athalye <[email protected]> | 2019-10-08 21:24:03 -0400 |
commit | f2df0fa5471c9951ff9a12bea51efbe22afb196e (patch) | |
tree | 6a78e4b456a80c04b8e65d4ec453345ac23d6159 /user/ulib.c | |
parent | 8509784d8000d6791a205626e81b03b3f9bf856b (diff) | |
download | xv6-labs-f2df0fa5471c9951ff9a12bea51efbe22afb196e.tar.gz xv6-labs-f2df0fa5471c9951ff9a12bea51efbe22afb196e.tar.bz2 xv6-labs-f2df0fa5471c9951ff9a12bea51efbe22afb196e.zip |
Fix ulib's memmove to handle overlap when src<dst
Diffstat (limited to 'user/ulib.c')
-rw-r--r-- | user/ulib.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/user/ulib.c b/user/ulib.c index 8bfba5d..4775939 100644 --- a/user/ulib.c +++ b/user/ulib.c @@ -103,8 +103,15 @@ memmove(void *vdst, const void *vsrc, int n) dst = vdst; src = vsrc; - while(n-- > 0) - *dst++ = *src++; + if (src > dst) { + while(n-- > 0) + *dst++ = *src++; + } else { + dst += n; + src += n; + while(n-- > 0) + *--dst = *--src; + } return vdst; } |