| From 545875ad0b6c9697fae41ae8770e95d117fe3cca Mon Sep 17 00:00:00 2001 |
| From: Maarten ter Huurne <maarten@treewalker.org> |
| 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 <maarten@treewalker.org> |
| [Ricardo: rebase on top of 4.3.1] |
| Signed-off-by: Ricardo Martincoski <ricardo.martincoski@gmail.com> |
| [Bernd: rebase on top of 4.7.0] |
| Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de> |
| [Julien: rebase on top of 4.9.1] |
| Signed-off-by: Julien Olivain <ju.o@free.fr> |
| --- |
| 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 <string.h> |
| #include <stdlib.h> |
| @@ -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 <string.h> |
| -#include <stdlib.h> |
| - |
| -#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 |
| |