From: Julian Seward Date: Sun, 31 Dec 2006 19:40:56 +0000 (+0000) Subject: Merge r6469 (Provide a replacement for mempcpy.) X-Git-Tag: svn/VALGRIND_3_2_2~30 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c08cfaefaf98c755ca93042851685f276be25055;p=thirdparty%2Fvalgrind.git Merge r6469 (Provide a replacement for mempcpy.) git-svn-id: svn://svn.valgrind.org/valgrind/branches/VALGRIND_3_2_BRANCH@6470 --- diff --git a/memcheck/mc_replace_strmem.c b/memcheck/mc_replace_strmem.c index fe0a786819..3a88332c73 100644 --- a/memcheck/mc_replace_strmem.c +++ b/memcheck/mc_replace_strmem.c @@ -562,6 +562,42 @@ GLIBC232_RAWMEMCHR(m_libc_so_star, rawmemchr) GLIBC25___STRCPY_CHK(m_libc_so_star, __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)) \ + complain3("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_so_star, mempcpy) + + /*--------------------------------------------------------------------*/ /*--- end ---*/ /*--------------------------------------------------------------------*/