From 4fb52a67b5650ecc3c7d90d39ab2dc67b4476505 Mon Sep 17 00:00:00 2001 From: Paul Floyd Date: Wed, 1 Jun 2022 22:09:50 +0200 Subject: [PATCH] Cleanup of str* and mem* functions Add function checks to configure.ac Use the configure HAVE_ macro rather than OS-dependent tests. I suspect that a lot of the tests hve been obsolete for many years. Add wrappers to FreeBSD. :w --- configure.ac | 5 +++++ dhat/tests/copy.c | 6 +++--- memcheck/tests/str_tester.c | 24 +++++++++++------------- shared/vg_replace_strmem.c | 15 +++++++++++++++ 4 files changed, 34 insertions(+), 16 deletions(-) diff --git a/configure.ac b/configure.ac index eda617fc5..369daa173 100755 --- a/configure.ac +++ b/configure.ac @@ -4790,6 +4790,11 @@ AC_CHECK_FUNCS([ \ swapcontext \ syscall \ utimensat \ + mempcpy \ + stpncpy \ + strchrnul \ + memrchr \ + strndup \ ]) # AC_CHECK_LIB adds any library found to the variable LIBS, and links these diff --git a/dhat/tests/copy.c b/dhat/tests/copy.c index ccaf8ba90..18479d782 100644 --- a/dhat/tests/copy.c +++ b/dhat/tests/copy.c @@ -43,10 +43,10 @@ void f(char* a, char* b, wchar_t* wa, wchar_t* wb) { memcpy (a, b, 1000); // Redirects to memmove memcpy (a, b, 1000); // Redirects to memmove memmove(a, b, 1000); -#if defined(VGO_solaris) || defined(VGO_darwin) || (defined(VGO_freebsd) && defined(__GNUC__)) - memcpy(a, b, 1000); -#else +#if defined(HAVE_MEMPCPY) mempcpy(a, b, 1000); +#else + memcpy(a, b, 1000); #endif bcopy (a, b, 1000); // Redirects to memmove strcpy (a, b); diff --git a/memcheck/tests/str_tester.c b/memcheck/tests/str_tester.c index 01354eb13..1201bbfc2 100644 --- a/memcheck/tests/str_tester.c +++ b/memcheck/tests/str_tester.c @@ -33,6 +33,7 @@ #include #include #include +#include "../../config.h" #ifndef HAVE_GNU_LD #define _sys_nerr sys_nerr @@ -264,8 +265,7 @@ test_stpcpy (void) SIMPLE_COPY(stpcpy, 16, "6666666666666666", 59); } -// DDD: better done by testing for the function. -#if !defined(__APPLE__) && !defined(__FreeBSD__) +#if defined(HAVE_STPNCPY) static void test_stpncpy (void) { @@ -466,8 +466,7 @@ test_strchr (void) } } -// DDD: better done by testing for the function. -#if !defined(__APPLE__) && !defined(__FreeBSD__) +#if defined(HAVE_STRCHRNUL) static void test_strchrnul (void) { @@ -578,8 +577,7 @@ test_strrchr (void) } } -// DDD: better done by testing for the function. -#if !defined(__APPLE__) && !defined(__sun) && !defined(__FreeBSD__) +#if defined(HAVE_MEMRCHR) static void test_memrchr (void) { @@ -1071,7 +1069,7 @@ test_memcpy (void) } } -#if !defined(__APPLE__) && !defined(__sun) && !defined(__FreeBSD__) +#if defined(HAVE_MEMPCPY) static void test_mempcpy (void) { @@ -1287,7 +1285,7 @@ test_bzero (void) equal(one, "abcdef", 4); /* Zero-length copy. */ } -#if !defined(__APPLE__) && !defined(__FreeBSD__) +#if defined(HAVE_STRNDUP) static void test_strndup (void) { @@ -1422,7 +1420,7 @@ main (void) /* A closely related function is stpcpy. */ test_stpcpy (); -#if !defined(__APPLE__) && !defined(__FreeBSD__) +#if defined(HAVE_STPNCPY) /* stpncpy. */ test_stpncpy (); #endif @@ -1445,7 +1443,7 @@ main (void) /* strchr. */ test_strchr (); -# if !defined(__APPLE__) && !defined(__FreeBSD__) +# if defined(HAVE_STRCHRNUL) /* strchrnul. */ test_strchrnul (); # endif @@ -1461,7 +1459,7 @@ main (void) /* strrchr. */ test_strrchr (); -# if !defined(__APPLE__) && !defined(__sun) && !defined(__FreeBSD__) +# if defined(HAVE_MEMRCHR) /* memrchr. */ test_memrchr (); # endif @@ -1502,7 +1500,7 @@ main (void) /* memmove - must work on overlap. */ test_memmove (); -# if !defined(__APPLE__) && !defined(__sun) && !defined(__FreeBSD__) +# if defined(HAVE_MEMPCPY) /* mempcpy */ test_mempcpy (); # endif @@ -1522,7 +1520,7 @@ main (void) /* bcmp - somewhat like memcmp. */ test_bcmp (); -#if !defined(__APPLE__) && !defined(__FreeBSD__) +#if defined(HAVE_STRNDUP) /* strndup. */ test_strndup (); #endif diff --git a/shared/vg_replace_strmem.c b/shared/vg_replace_strmem.c index 5396e83be..aab141391 100644 --- a/shared/vg_replace_strmem.c +++ b/shared/vg_replace_strmem.c @@ -461,6 +461,10 @@ static inline void my_exit ( int x ) STRNLEN(VG_Z_LIBC_SONAME, strnlen) STRNLEN(VG_Z_LIBC_SONAME, __GI_strnlen) +#elif defined(VGO_freebsd) + + STRNLEN(VG_Z_LIBC_SONAME, srtnlen) + #elif defined(VGO_darwin) # if DARWIN_VERS == DARWIN_10_9 STRNLEN(libsystemZucZddylib, strnlen) @@ -853,6 +857,9 @@ static inline void my_exit ( int x ) STRCASECMP_L(VG_Z_LIBC_SONAME, __GI_strcasecmp_l) STRCASECMP_L(VG_Z_LIBC_SONAME, __GI___strcasecmp_l) +#elif defined(VGO_freebsd) + STRCASECMP_L(VG_Z_LIBC_SONAME, strcasecmp_l) + #elif defined(VGO_darwin) //STRCASECMP_L(VG_Z_LIBC_SONAME, strcasecmp_l) @@ -891,6 +898,9 @@ static inline void my_exit ( int x ) STRNCASECMP_L(VG_Z_LIBC_SONAME, __GI_strncasecmp_l) STRNCASECMP_L(VG_Z_LIBC_SONAME, __GI___strncasecmp_l) +#elif defined(VGO_freebsd) + STRNCASECMP_L(VG_Z_LIBC_SONAME, strncasecmp_l) + #elif defined(VGO_darwin) //STRNCASECMP_L(VG_Z_LIBC_SONAME, strncasecmp_l) //STRNCASECMP_L(VG_Z_DYLD, strncasecmp_l) @@ -972,6 +982,9 @@ static inline void my_exit ( int x ) MEMCHR(VG_Z_LIBC_SONAME, memchr) MEMCHR(VG_Z_LIBC_SONAME, __GI_memchr) +#elif defined(VGO_freebsd) + MEMCHR(VG_Z_LIBC_SONAME, memchr) + #elif defined(VGO_darwin) # if DARWIN_VERS == DARWIN_10_9 MEMCHR(VG_Z_DYLD, memchr) @@ -1673,6 +1686,8 @@ static inline void my_exit ( int x ) GLIBC25_MEMPCPY(VG_Z_LD_LINUX_SO_3, mempcpy) /* ld-linux.so.3 */ GLIBC25_MEMPCPY(VG_Z_LD_LINUX_X86_64_SO_2, mempcpy) /* ld-linux-x86-64.so.2 */ +#elif defined(VGO_freebsd) + GLIBC25_MEMPCPY(VG_Z_LIBC_SONAME, mempcpy) #elif defined(VGO_darwin) //GLIBC25_MEMPCPY(VG_Z_LIBC_SONAME, mempcpy)