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

« back to all changes in this revision

Viewing changes to reference/glibc-c/strcpy.c

  • Committer: Michael Hope
  • Date: 2012-06-12 03:19:48 UTC
  • Revision ID: michael.hope@linaro.org-20120612031948-4ii8jicywtzjprak
Added the C only routines from GLIBC 2.16+20120607~git24a6dbe

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
}