Provide a replacement for mempcpy.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6469
This commit is contained in:
Julian Seward 2006-12-31 18:55:56 +00:00
parent 6f9073af5f
commit 20b41c0c23

View File

@ -558,6 +558,42 @@ GLIBC232_RAWMEMCHR(m_libc_soname, rawmemchr)
GLIBC25___STRCPY_CHK(m_libc_soname, __strcpy_chk)
/* mempcpy */
#define GLIBC25_MEMPCPY(soname, fnname) \
void* VG_REPLACE_FUNCTION_ZU(soname,fnname) \
( void *dst, const void *src, SizeT len ); \
void* VG_REPLACE_FUNCTION_ZU(soname,fnname) \
( void *dst, const void *src, SizeT len ) \
{ \
register char *d; \
register char *s; \
SizeT len_saved = len; \
\
if (len == 0) \
return dst; \
\
if (is_overlap(dst, src, len, len)) \
RECORD_OVERLAP_ERROR("mempcpy", dst, src, len); \
\
if ( dst > src ) { \
d = (char *)dst + len - 1; \
s = (char *)src + len - 1; \
while ( len-- ) { \
*d-- = *s--; \
} \
} else if ( dst < src ) { \
d = (char *)dst; \
s = (char *)src; \
while ( len-- ) { \
*d++ = *s++; \
} \
} \
return (void*)( ((char*)dst) + len_saved ); \
}
GLIBC25_MEMPCPY(m_libc_soname, mempcpy)
/*------------------------------------------------------------*/
/*--- AIX stuff only after this point ---*/
/*------------------------------------------------------------*/