alcyone/SDK/CRT/STRING/mem.c
Quinn Stephens 5c52adf492 [SDK] Big update
Signed-off-by: Quinn Stephens <quinn@osmora.org>
2025-06-11 20:00:34 -04:00

82 lines
1.1 KiB
C

/*++
Copyright (c) 2024-2025, Quinn Stephens.
Provided under the BSD 3-Clause license.
Module Name:
mem.c
Abstract:
Provides memory manipulation routines.
--*/
#include <string.h>
void *
memset (
void *dest,
int c,
size_t count
)
{
void *ptr = dest;
while (count--) {
*(char *)dest = (char)c;
dest = (char *)dest + 1;
}
return ptr;
}
void *
memcpy (
void *dest,
const void *src,
size_t count
)
{
void *ptr = dest;
while (count--) {
*(char *)dest = *(char *)src;
dest = (char *)dest + 1;
src = (char *)src + 1;
}
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 */
return memcpy(dest, src, count);
}
/* 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;
}