From 545875ad0b6c9697fae41ae8770e95d117fe3cca Mon Sep 17 00:00:00 2001 From: Maarten ter Huurne Date: Sat, 13 Sep 2014 11:37:59 +0200 Subject: [PATCH] Do not use memcpy as an alternative for bcopy/memmove The configure script runs a small test program to check whether memcpy can handle overlapping memory areas. However, it is not valid to conclude that if a single case of overlapping memory is handled correctly, all cases will be handled correctly. Since screen already has its own bcopy implementation as a fallback for the case that bcopy and memmove are unusable, removing the memcpy option should not break any systems. Signed-off-by: Maarten ter Huurne [Ricardo: rebase on top of 4.3.1] Signed-off-by: Ricardo Martincoski [Bernd: rebase on top of 4.7.0] Signed-off-by: Bernd Kuhls [Julien: rebase on top of 4.9.1] Signed-off-by: Julien Olivain --- acconfig.h | 3 +-- configure.ac | 22 +--------------------- os.h | 8 ++------ osdef.h.in | 10 +--------- 4 files changed, 5 insertions(+), 38 deletions(-) diff --git a/acconfig.h b/acconfig.h index 46d62b0..f83572c 100644 --- a/acconfig.h +++ b/acconfig.h @@ -476,7 +476,7 @@ #undef GETTTYENT /* - * Define USEBCOPY if the bcopy/memcpy from your system's C library + * Define USEBCOPY if the bcopy from your system's C library * supports the overlapping of source and destination blocks. When * undefined, screen uses its own (probably slower) version of bcopy(). * @@ -487,7 +487,6 @@ * Their memove fails the test in the configure script. Sigh. (Juergen) */ #undef USEBCOPY -#undef USEMEMCPY #undef USEMEMMOVE /* diff --git a/configure.ac b/configure.ac index 1a12c04..6f6c2da 100644 --- a/configure.ac +++ b/configure.ac @@ -1278,7 +1278,7 @@ AC_TRY_LINK([ fdwalk(NULL, NULL); ],AC_DEFINE(HAVE_FDWALK)) -AC_CHECKING(whether memcpy/memmove/bcopy handles overlapping arguments) +AC_CHECKING(whether memmove/bcopy handles overlapping arguments) AC_TRY_RUN([ #include #include @@ -1319,26 +1319,6 @@ main() { }], AC_DEFINE(USEMEMMOVE),, AC_NOTE(- skipping check because we are cross compiling; use memmove) AC_DEFINE(USEMEMMOVE)) -AC_TRY_RUN([ -#include -#include - -#define bcopy(s,d,l) memcpy(d,s,l) - -int -main() { - char buf[10]; - strcpy(buf, "abcdefghi"); - bcopy(buf, buf + 2, 3); - if (strncmp(buf, "ababcf", 6)) - return 1; - strcpy(buf, "abcdefghi"); - bcopy(buf + 2, buf, 3); - if (strncmp(buf, "cdedef", 6)) - return 1; - return 0; /* libc version works properly. */ -}], AC_DEFINE(USEMEMCPY),,:) - AC_SYS_LONG_FILE_NAMES AC_MSG_CHECKING(for vsprintf) diff --git a/os.h b/os.h index 2a1c2ca..d1ac87e 100644 --- a/os.h +++ b/os.h @@ -142,12 +142,8 @@ extern int errno; # ifdef USEMEMMOVE # define bcopy(s,d,len) memmove(d,s,len) # else -# ifdef USEMEMCPY -# define bcopy(s,d,len) memcpy(d,s,len) -# else -# define NEED_OWN_BCOPY -# define bcopy xbcopy -# endif +# define NEED_OWN_BCOPY +# define bcopy xbcopy # endif #endif diff --git a/osdef.h.in b/osdef.h.in index 6ddbd66..abdacf7 100644 --- a/osdef.h.in +++ b/osdef.h.in @@ -58,16 +58,8 @@ extern int bcmp __P((char *, char *, int)); extern int killpg __P((int, int)); #endif -#ifndef USEBCOPY -# ifdef USEMEMCPY -extern void memcpy __P((char *, char *, int)); -# else -# ifdef USEMEMMOVE +#if defined(USEMEMMOVE) && !defined(USEBCOPY) extern void memmove __P((char *, char *, int)); -# else -extern void bcopy __P((char *, char *, int)); -# endif -# endif #else extern void bcopy __P((char *, char *, int)); #endif -- 2.41.0