From 46f3381adef956e0e3d83e8950af6cba8420f9f5 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Jan=20Dj=C3=A4rv?= <jan.h.d@swipnet.se>
Date: Mon, 23 Nov 2009 09:51:06 +0000
Subject: [PATCH] * etags.c (absolute_filename): Use memove if we have it for
 overlapping copy.

---
 lib-src/ChangeLog |  5 +++++
 lib-src/etags.c   | 11 ++++++++++-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog
index b72d928dc6c..e4a1a3ea576 100644
--- a/lib-src/ChangeLog
+++ b/lib-src/ChangeLog
@@ -1,3 +1,8 @@
+2009-11-23  Tobias Ringström  <tobias@ringis.se> (tiny change)
+
+	* etags.c (absolute_filename): Use memove if we have it for
+	overlapping copy.
+
 2009-11-04  Dan Nicolaescu  <dann@ics.uci.edu>
 
 	* make-docfile.c (scan_lisp_file): Also look for `defvaralias'.
diff --git a/lib-src/etags.c b/lib-src/etags.c
index 0fbade822d5..6fce4529855 100644
--- a/lib-src/etags.c
+++ b/lib-src/etags.c
@@ -6695,13 +6695,22 @@ absolute_filename (file, dir)
 	      else if (cp[0] != '/')
 		cp = slashp;
 #endif
+#ifdef HAVE_MEMMOVE
+              memmove (cp, slashp + 3, strlen (slashp + 2));
+#else
+              /* Overlapping copy isn't really okay */
 	      strcpy (cp, slashp + 3);
+#endif
 	      slashp = cp;
 	      continue;
 	    }
 	  else if (slashp[2] == '/' || slashp[2] == '\0')
 	    {
-	      strcpy (slashp, slashp + 2);
+#ifdef HAVE_MEMMOVE
+	      memmove (slashp, slashp + 2, strlen (slashp + 1));
+#else
+              strcpy (slashp, slashp + 2);
+#endif
 	      continue;
 	    }
 	}
-- 
2.39.5