[SDK:CRT] Implement memcpy() and wmemcpy()
This commit is contained in:
parent
8ff7a75afc
commit
e48262d4d7
@ -29,6 +29,7 @@ size_t strnlen(const char *str, size_t maxlen);
|
|||||||
|
|
||||||
void *memset(void *dest, int c, size_t count);
|
void *memset(void *dest, int c, size_t count);
|
||||||
void *memcpy(void *dest, const void *src, size_t count);
|
void *memcpy(void *dest, const void *src, size_t count);
|
||||||
|
void *memmove(void *dest, const void *src, size_t count);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,7 @@ size_t wcsnlen(const wchar_t *str, size_t maxlen);
|
|||||||
|
|
||||||
wchar_t *wmemset(wchar_t *dest, wchar_t c, size_t count);
|
wchar_t *wmemset(wchar_t *dest, wchar_t c, size_t count);
|
||||||
wchar_t *wmemcpy(wchar_t *dest, const wchar_t *src, size_t count);
|
wchar_t *wmemcpy(wchar_t *dest, const wchar_t *src, size_t count);
|
||||||
|
wchar_t *wmemmove(wchar_t *dest, const wchar_t *src, size_t count);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -51,3 +51,35 @@ memcpy (
|
|||||||
|
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void *
|
||||||
|
memmove (
|
||||||
|
void *dest,
|
||||||
|
const void *src,
|
||||||
|
size_t count
|
||||||
|
)
|
||||||
|
|
||||||
|
{
|
||||||
|
void *ptr = dest;
|
||||||
|
|
||||||
|
/* Check for overlap */
|
||||||
|
if (src > dest || ((char *)src + count) < (char *)dest) {
|
||||||
|
/* Low-to-high copy, like memcpy() */
|
||||||
|
while (count--) {
|
||||||
|
*(char *)dest = *(char *)src;
|
||||||
|
dest = (char *)dest + 1;
|
||||||
|
src = (char *)src + 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* High-to-low copy */
|
||||||
|
dest = (char *)dest + count - 1;
|
||||||
|
src = (char *)src + count - 1;
|
||||||
|
while (count--) {
|
||||||
|
*(char *)dest = *(char *)src;
|
||||||
|
dest = (char *)dest - 1;
|
||||||
|
src = (char *)src - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
@ -23,7 +23,7 @@ wmemset (
|
|||||||
)
|
)
|
||||||
|
|
||||||
{
|
{
|
||||||
void *ptr = dest;
|
wchar_t *ptr = dest;
|
||||||
|
|
||||||
while (count--) {
|
while (count--) {
|
||||||
*(wchar_t *)dest = c;
|
*(wchar_t *)dest = c;
|
||||||
@ -41,7 +41,7 @@ wmemcpy (
|
|||||||
)
|
)
|
||||||
|
|
||||||
{
|
{
|
||||||
void *ptr = dest;
|
wchar_t *ptr = dest;
|
||||||
|
|
||||||
while (count--) {
|
while (count--) {
|
||||||
*(wchar_t *)dest = *(wchar_t *)src;
|
*(wchar_t *)dest = *(wchar_t *)src;
|
||||||
@ -51,3 +51,35 @@ wmemcpy (
|
|||||||
|
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wchar_t *
|
||||||
|
wmemmove (
|
||||||
|
wchar_t *dest,
|
||||||
|
const wchar_t *src,
|
||||||
|
size_t count
|
||||||
|
)
|
||||||
|
|
||||||
|
{
|
||||||
|
wchar_t *ptr = dest;
|
||||||
|
|
||||||
|
/* Check for overlap */
|
||||||
|
if (src > dest || ((wchar_t *)src + count) < (wchar_t *)dest) {
|
||||||
|
/* Low-to-high copy, like memcpy() */
|
||||||
|
while (count--) {
|
||||||
|
*(wchar_t *)dest = *(wchar_t *)src;
|
||||||
|
dest = (wchar_t *)dest + 1;
|
||||||
|
src = (wchar_t *)src + 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* High-to-low copy */
|
||||||
|
dest = (wchar_t *)dest + count - 1;
|
||||||
|
src = (wchar_t *)src + count - 1;
|
||||||
|
while (count--) {
|
||||||
|
*(wchar_t *)dest = *(wchar_t *)src;
|
||||||
|
dest = (wchar_t *)dest - 1;
|
||||||
|
src = (wchar_t *)src - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user