]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - debug/strncpy_chk.c
math: Use wordsize-64 version for isnan
[thirdparty/glibc.git] / debug / strncpy_chk.c
index 674d16033b6e9a3ed560e3087bd3c1d3e8a9ea69..72607f4850fb0a025a05989a2b9812b5d30233e2 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1997, 2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 1991-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
 
 
 char *
-__strncpy_chk (s1, s2, n, s1len)
-     char *s1;
-     const char *s2;
-     size_t n;
-     size_t s1len;
+__strncpy_chk (char *s1, const char *s2, size_t n, size_t s1len)
 {
-  reg_char c;
-  char *s = s1;
-
   if (__builtin_expect (s1len < n, 0))
     __chk_fail ();
 
-  --s1;
-
-  if (n >= 4)
-    {
-      size_t n4 = n >> 2;
-
-      for (;;)
-       {
-         c = *s2++;
-         *++s1 = c;
-         if (c == '\0')
-           break;
-         c = *s2++;
-         *++s1 = c;
-         if (c == '\0')
-           break;
-         c = *s2++;
-         *++s1 = c;
-         if (c == '\0')
-           break;
-         c = *s2++;
-         *++s1 = c;
-         if (c == '\0')
-           break;
-         if (--n4 == 0)
-           goto last_chars;
-       }
-      n = n - (s1 - s) - 1;
-      if (n == 0)
-       return s;
-      goto zero_fill;
-    }
-
- last_chars:
-  n &= 3;
-  if (n == 0)
-    return s;
-
-  do
-    {
-      c = *s2++;
-      *++s1 = c;
-      if (--n == 0)
-       return s;
-    }
-  while (c != '\0');
-
- zero_fill:
-  do
-    *++s1 = '\0';
-  while (--n > 0);
-
-  return s;
+  return strncpy (s1, s2, n);
 }