about summary refs log tree commit diff
path: root/string/strncat.c
diff options
context:
space:
mode:
authorWilco Dijkstra <wdijkstr@arm.com>2014-10-24 16:12:12 +0000
committerWilco Dijkstra <wdijkstr@arm.com>2014-10-24 16:12:12 +0000
commite80514b5a87c86a92352ce526c4b9db85f2a242c (patch)
treeeef102c72f8f43c86bbfc67b8343a6cf555bc47c /string/strncat.c
parent6e46de42fe1695818a410a7b86d26be8b1527524 (diff)
downloadglibc-e80514b5a87c86a92352ce526c4b9db85f2a242c.tar.gz
glibc-e80514b5a87c86a92352ce526c4b9db85f2a242c.tar.xz
glibc-e80514b5a87c86a92352ce526c4b9db85f2a242c.zip
This patch improves strncat performance by using strlen. Strlen has a fast C implementation, so
this
will improve performance even on targets which don't have an optimized strlen. It is about twice
as
fast as the original strncat in bench-strncat.
Diffstat (limited to 'string/strncat.c')
-rw-r--r--string/strncat.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/string/strncat.c b/string/strncat.c
index 7ac44561bd..6d29114d38 100644
--- a/string/strncat.c
+++ b/string/strncat.c
@@ -33,13 +33,11 @@ STRNCAT (char *s1, const char *s2, size_t n)
   char *s = s1;
 
   /* Find the end of S1.  */
-  do
-    c = *s1++;
-  while (c != '\0');
+  s1 += strlen (s1);
 
   /* Make S1 point before next character, so we can increment
      it while memory is read (wins on pipelined cpus).  */
-  s1 -= 2;
+  s1 -= 1;
 
   if (n >= 4)
     {