~linaro-toolchain-dev/cortex-strings/trunk

70 by Michael Hope
Added the C only routines from GLIBC 2.16+20120607~git24a6dbe
1
/* Copyright (C) 1991, 1997, 2000, 2003 Free Software Foundation, Inc.
2
   This file is part of the GNU C Library.
3
4
   The GNU C Library is free software; you can redistribute it and/or
5
   modify it under the terms of the GNU Lesser General Public
6
   License as published by the Free Software Foundation; either
7
   version 2.1 of the License, or (at your option) any later version.
8
9
   The GNU C Library is distributed in the hope that it will be useful,
10
   but WITHOUT ANY WARRANTY; without even the implied warranty of
11
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12
   Lesser General Public License for more details.
13
14
   You should have received a copy of the GNU Lesser General Public
15
   License along with the GNU C Library; if not, see
16
   <http://www.gnu.org/licenses/>.  */
17
18
#include <stddef.h>
19
#include <string.h>
20
#include "memcopy.h"
21
#include "bp-checks.h"
22
23
#undef strcpy
24
25
/* Copy SRC to DEST.  */
26
char *
27
strcpy (dest, src)
28
     char *dest;
29
     const char *src;
30
{
31
  char c;
32
  char *__unbounded s = (char *__unbounded) CHECK_BOUNDS_LOW (src);
33
  const ptrdiff_t off = CHECK_BOUNDS_LOW (dest) - s - 1;
34
  size_t n;
35
36
  do
37
    {
38
      c = *s++;
39
      s[off] = c;
40
    }
41
  while (c != '\0');
42
43
  n = s - src;
44
  (void) CHECK_BOUNDS_HIGH (src + n);
45
  (void) CHECK_BOUNDS_HIGH (dest + n);
46
47
  return dest;
48
}