diff options
Diffstat (limited to 'src/wchar/wmemmove.c')
| -rw-r--r-- | src/wchar/wmemmove.c | 23 |
1 files 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 <wchar.h> #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; } |
