blob: 13ad32e7a2d5e32358c6d7f0628cc1fc4af64f5e [file] [log] [blame] [edit]
#define _GNU_SOURCE
#include <dlfcn.h>
#include <parlib/vcore.h>
#include <string.h>
#include <stdio.h>
static void *parlib_memmove(void *dest, const void *src, size_t n)
{
const char *s;
char *d;
s = src;
d = dest;
if (s < d && s + n > d) {
s += n;
d += n;
while (n-- > 0)
*--d = *--s;
} else
while (n-- > 0)
*d++ = *s++;
return dest;
}
void *memmove(void *dest, const void *src, size_t n)
{
static void *(*glibc_memmove)(void *, const void *, size_t) = 0;
if (in_vcore_context())
return parlib_memmove(dest, src, n);
if (!glibc_memmove)
glibc_memmove = dlsym(RTLD_NEXT, "memmove");
return glibc_memmove(dest, src, n);
}