]> git.ipfire.org Git - thirdparty/make.git/commitdiff
Prefer memcpy to strncpy if either will do
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 5 Aug 2024 08:21:09 +0000 (01:21 -0700)
committerPaul Smith <psmith@gnu.org>
Mon, 2 Sep 2024 18:43:24 +0000 (14:43 -0400)
strncpy is trickier and a bit slower.
* src/function.c (func_realpath, func_abspath):
* src/misc.c (xstrndup):
Prefer memcpy or mempcpy to strncpy when the source length is known.

src/function.c
src/misc.c

index bf4f2abbba8a1b88efb1b8d90b045b6e484e987c..133e33a3abac0f9ef51ffb058410298c7d45d9f9 100644 (file)
@@ -2109,7 +2109,7 @@ abspath (const char *name, char *apath)
           apath[3] = '/';
           dest++;
           root_len++;
-          /* strncpy above copied one character too many.  */
+          /* memcpy above copied one character too many.  */
           name--;
         }
       else
@@ -2178,13 +2178,13 @@ func_realpath (char *o, char **argv, const char *funcname UNUSED)
     {
       if (len < GET_PATH_MAX)
         {
-          char *rp;
+          char *rp, *inend;
           struct stat st;
           PATH_VAR (in);
           PATH_VAR (out);
 
-          strncpy (in, path, len);
-          in[len] = '\0';
+          inend = mempcpy (in, path, len);
+          *inend = '\0';
 
 #ifdef HAVE_REALPATH
           ENULLLOOP (rp, realpath (in, out));
@@ -2353,9 +2353,9 @@ func_abspath (char *o, char **argv, const char *funcname UNUSED)
         {
           PATH_VAR (in);
           PATH_VAR (out);
+          char *inend = mempcpy (in, path, len);
 
-          strncpy (in, path, len);
-          in[len] = '\0';
+          *inend = '\0';
 
           if (abspath (in, out))
             {
index 9e41a546307f3a6db960fa1801361bd9b4cfad93..b36248f0d07495208f8553504215fc277dadfc65 100644 (file)
@@ -351,7 +351,7 @@ xstrndup (const char *str, size_t length)
 #else
   result = xmalloc (length + 1);
   if (length > 0)
-    strncpy (result, str, length);
+    memcpy (result, str, length);
   result[length] = '\0';
 #endif