mirror of
https://github.com/zeldaret/oot.git
synced 2024-12-02 15:55:59 +00:00
34 lines
712 B
C
34 lines
712 B
C
|
#include "global.h"
|
||
|
|
||
|
/**
|
||
|
* memmove: copies `len` bytes from memory starting at `src` to memory starting at `dest`.
|
||
|
*
|
||
|
* Unlike memcpy(), the regions of memory may overlap.
|
||
|
*
|
||
|
* @param dest address of start of buffer to write to
|
||
|
* @param src address of start of buffer to read from
|
||
|
* @param len number of bytes to copy.
|
||
|
*
|
||
|
* @return dest
|
||
|
*/
|
||
|
void* __osMemmove(void* dest, const void* src, size_t len) {
|
||
|
u8* d = dest;
|
||
|
const u8* s = src;
|
||
|
|
||
|
if (d == s) {
|
||
|
return dest;
|
||
|
}
|
||
|
if (d < s) {
|
||
|
while (len--) {
|
||
|
*d++ = *s++;
|
||
|
}
|
||
|
} else {
|
||
|
d += len - 1;
|
||
|
s += len - 1;
|
||
|
while (len--) {
|
||
|
*d-- = *s--;
|
||
|
}
|
||
|
}
|
||
|
return dest;
|
||
|
}
|