]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - debug/stpcpy_chk.c
Prefer https to http for gnu.org and fsf.org URLs
[thirdparty/glibc.git] / debug / stpcpy_chk.c
index 2bb7b518447b8b6680ee973906a9cf1198379849..9dc76bd1f2c39e6c39499448e01f6b437181b75e 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992, 1995, 1997, 2002, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2019 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -13,7 +13,7 @@
 
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
+   <https://www.gnu.org/licenses/>.  */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
 
 /* Copy SRC to DEST, returning the address of the terminating '\0' in DEST.  */
 char *
-__stpcpy_chk (dest, src, destlen)
-     char *dest;
-     const char *src;
-     size_t destlen;
+__stpcpy_chk (char *dest, const char *src, size_t destlen)
 {
-  register char *d = dest;
-  register const char *s = src;
-
-  do
-    {
-      if (__builtin_expect (destlen-- == 0, 0))
-       __chk_fail ();
-      *d++ = *s;
-    }
-  while (*s++ != '\0');
-
-  return d - 1;
+  size_t len = strlen (src);
+  if (len >= destlen)
+    __chk_fail ();
+
+  return memcpy (dest, src, len + 1) + len;
 }