From bda4ede6fbf8b851a0e048011ea728015b19722d Mon Sep 17 00:00:00 2001 From: Jakob Kaivo Date: Thu, 28 Feb 2019 14:22:40 -0500 Subject: match memmove() implementation without malloc() --- src/wchar/wmemmove.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/wchar/wmemmove.c b/src/wchar/wmemmove.c index 11fd35dc..75b58f87 100644 --- a/src/wchar/wmemmove.c +++ b/src/wchar/wmemmove.c @@ -1,12 +1,27 @@ #include #include "stdlib.h" +#include "nonstd/assert.h" wchar_t * wmemmove(wchar_t * s1, const wchar_t * s2, size_t n) { - wchar_t *tmp = malloc(n * sizeof(wchar_t)); - wmemcpy(tmp, s2, n); - wmemcpy(s1, tmp, n); - free(tmp); + ASSERT_NONNULL(s1); + ASSERT_NONNULL(s2); + + if (s1 < s2) { + return wmemcpy(s1, s2, n); + } + + /* reverse memcpy() */ + while (n > 0) { + s1[n] = s2[n]; + n--; + } + /* last byte */ + s1[n] = s2[n]; + + /* + RETURN_ALWAYS(ARGUMENT(s1)); + */ return s1; } -- cgit v1.2.1