diff options
Diffstat (limited to 'src/mem/memmove.c')
-rw-r--r-- | src/mem/memmove.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/mem/memmove.c b/src/mem/memmove.c index b6c6b1e..abb5d41 100644 --- a/src/mem/memmove.c +++ b/src/mem/memmove.c @@ -6,6 +6,24 @@ #include <mem.h> -extern inline void *calt_memmove(void *dest, void const *src, size_t count); -extern inline void *calt_memmove_null(void *dest, void const *src, size_t count); +void *calt_memmove(void *dest, void const *src, size_t count) { + unsigned char *d = dest; + unsigned char const *s = src; + + if (d > s) { + d += count; + s += count; + while (count-- > 0) { + *--d = *--s; + } + } else if (d < s) { + calt_memcpy(dest, src, count); + } + + return dest; +} + +void *calt_memmove_null(void *dest, void const *src, size_t count) { + return dest ? calt_memmove(dest, src, count) : NULL; +} |