diff options
Diffstat (limited to 'src/base/mem/move.c')
-rw-r--r-- | src/base/mem/move.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/base/mem/move.c b/src/base/mem/move.c new file mode 100644 index 0000000..5ad4074 --- /dev/null +++ b/src/base/mem/move.c @@ -0,0 +1,22 @@ +#include "internal.h" + +int +memĀ·move(void *dst, void *src, uintptr len) +{ + char *d, *s; + if((long)len < 0) + return 1; + + d=dst, s=src; + if((s < d) && (s+len > d)) + goto aliased; + while(len-- > 0) + *d++ = *s++; + return 0; + +aliased: + d+=len, s+=len; + while(len-- > 0) + *--d = *--s; + return 0; +} |