strlcpy: simplify
authorRémi Denis-Courmont <remi@remlab.net>
Sun, 17 Jun 2018 08:23:11 +0000 (11:23 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Sun, 17 Jun 2018 08:23:11 +0000 (11:23 +0300)
compat/strlcpy.c

index cc7bcff..4ef2709 100644 (file)
@@ -22,7 +22,7 @@
 # include <config.h>
 #endif
 
-#include <stddef.h>
+#include <string.h>
 
 /**
  * Copy a string to a sized buffer. The result is always nul-terminated
  */
 size_t strlcpy (char *tgt, const char *src, size_t bufsize)
 {
-    size_t length;
+    size_t length = strlen(src);
 
-    for (length = 1; (length < bufsize) && *src; length++)
-        *tgt++ = *src++;
+    if (bufsize > length)
+        memcpy(tgt, src, length + 1);
+    else
+    if (bufsize > 0)
+        memcpy(tgt, src, bufsize - 1), tgt[bufsize - 1] = '\0';
 
-    if (bufsize)
-        *tgt = '\0';
-
-    while (*src++)
-        length++;
-
-    return length - 1;
+    return length;
 }