aboutsummaryrefslogtreecommitdiffstats
path: root/src/mem/memmove.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem/memmove.c')
-rw-r--r--src/mem/memmove.c22
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;
+}