about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--string/memccpy.c11
2 files changed, 9 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 5f40e4e015..65592c3e80 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2015-08-05  Wilco Dijkstra  <wdijkstr@arm.com>
 
+	* string/memccpy.c (memccpy):
+	Improve performance by using memchr/memcpy/__mempcpy.
+
+2015-08-05  Wilco Dijkstra  <wdijkstr@arm.com>
+
 	* string/strncpy.c (strncpy):
 	Improve performance by using __strnlen/memcpy.
 
diff --git a/string/memccpy.c b/string/memccpy.c
index d9ed6975ef..0987c84aa0 100644
--- a/string/memccpy.c
+++ b/string/memccpy.c
@@ -26,15 +26,12 @@
 void *
 __memccpy (void *dest, const void *src, int c, size_t n)
 {
-  const char *s = src;
-  char *d = dest;
-  const char x = c;
-  size_t i = n;
+  void *p = memchr (src, c, n);
 
-  while (i-- > 0)
-    if ((*d++ = *s++) == x)
-      return d;
+  if (p != NULL)
+    return __mempcpy (dest, src, p - src + 1);
 
+  memcpy (dest, src, n);
   return NULL;
 }