]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Merge r6469 (Provide a replacement for mempcpy.)
authorJulian Seward <jseward@acm.org>
Sun, 31 Dec 2006 19:40:56 +0000 (19:40 +0000)
committerJulian Seward <jseward@acm.org>
Sun, 31 Dec 2006 19:40:56 +0000 (19:40 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/branches/VALGRIND_3_2_BRANCH@6470

memcheck/mc_replace_strmem.c

index fe0a7868190cf117b0a51c782411c896beaf1cf1..3a88332c73d8ba04badd4096c83912c1c2e683fe 100644 (file)
@@ -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                                                          ---*/
 /*--------------------------------------------------------------------*/