LCOV - code coverage report
Current view: top level - usr/include/x86_64-linux-gnu/bits - string3.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 3 4 75.0 %
Date: 2016-09-12 13:07:23 Functions: 0 0 -

          Line data    Source code
       1             : /* Copyright (C) 2004-2014 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             : #ifndef _STRING_H
      19             : # error "Never use <bits/string3.h> directly; include <string.h> instead."
      20             : #endif
      21             : 
      22             : __warndecl (__warn_memset_zero_len,
      23             :             "memset used with constant zero length parameter; this could be due to transposed parameters");
      24             : 
      25             : #ifndef __cplusplus
      26             : /* XXX This is temporarily.  We should not redefine any of the symbols
      27             :    and instead integrate the error checking into the original
      28             :    definitions.  */
      29             : # undef memcpy
      30             : # undef memmove
      31             : # undef memset
      32             : # undef strcat
      33             : # undef strcpy
      34             : # undef strncat
      35             : # undef strncpy
      36             : # ifdef __USE_GNU
      37             : #  undef mempcpy
      38             : #  undef stpcpy
      39             : # endif
      40             : # ifdef __USE_BSD
      41             : #  undef bcopy
      42             : #  undef bzero
      43             : # endif
      44             : #endif
      45             : 
      46             : 
      47             : __fortify_function void *
      48             : __NTH (memcpy (void *__restrict __dest, const void *__restrict __src,
      49             :                size_t __len))
      50             : {
      51          31 :   return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest));
      52             : }
      53             : 
      54             : __fortify_function void *
      55             : __NTH (memmove (void *__dest, const void *__src, size_t __len))
      56             : {
      57             :   return __builtin___memmove_chk (__dest, __src, __len, __bos0 (__dest));
      58             : }
      59             : 
      60             : #ifdef __USE_GNU
      61             : __fortify_function void *
      62             : __NTH (mempcpy (void *__restrict __dest, const void *__restrict __src,
      63             :                 size_t __len))
      64             : {
      65             :   return __builtin___mempcpy_chk (__dest, __src, __len, __bos0 (__dest));
      66             : }
      67             : #endif
      68             : 
      69             : 
      70             : /* The first two tests here help to catch a somewhat common problem
      71             :    where the second and third parameter are transposed.  This is
      72             :    especially problematic if the intended fill value is zero.  In this
      73             :    case no work is done at all.  We detect these problems by referring
      74             :    non-existing functions.  */
      75             : __fortify_function void *
      76             : __NTH (memset (void *__dest, int __ch, size_t __len))
      77             : {
      78             :   if (__builtin_constant_p (__len) && __len == 0
      79             :       && (!__builtin_constant_p (__ch) || __ch != 0))
      80             :     {
      81             :       __warn_memset_zero_len ();
      82             :       return __dest;
      83             :     }
      84         154 :   return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
      85             : }
      86             : 
      87             : #ifdef __USE_BSD
      88             : __fortify_function void
      89             : __NTH (bcopy (const void *__src, void *__dest, size_t __len))
      90             : {
      91             :   (void) __builtin___memmove_chk (__dest, __src, __len, __bos0 (__dest));
      92             : }
      93             : 
      94             : __fortify_function void
      95             : __NTH (bzero (void *__dest, size_t __len))
      96             : {
      97             :   (void) __builtin___memset_chk (__dest, '\0', __len, __bos0 (__dest));
      98             : }
      99             : #endif
     100             : 
     101             : __fortify_function char *
     102             : __NTH (strcpy (char *__restrict __dest, const char *__restrict __src))
     103             : {
     104           0 :   return __builtin___strcpy_chk (__dest, __src, __bos (__dest));
     105             : }
     106             : 
     107             : #ifdef __USE_GNU
     108             : __fortify_function char *
     109             : __NTH (stpcpy (char *__restrict __dest, const char *__restrict __src))
     110             : {
     111             :   return __builtin___stpcpy_chk (__dest, __src, __bos (__dest));
     112             : }
     113             : #endif
     114             : 
     115             : 
     116             : __fortify_function char *
     117             : __NTH (strncpy (char *__restrict __dest, const char *__restrict __src,
     118             :                 size_t __len))
     119             : {
     120          23 :   return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));
     121             : }
     122             : 
     123             : // XXX We have no corresponding builtin yet.
     124             : extern char *__stpncpy_chk (char *__dest, const char *__src, size_t __n,
     125             :                             size_t __destlen) __THROW;
     126             : extern char *__REDIRECT_NTH (__stpncpy_alias, (char *__dest, const char *__src,
     127             :                                                size_t __n), stpncpy);
     128             : 
     129             : __fortify_function char *
     130             : __NTH (stpncpy (char *__dest, const char *__src, size_t __n))
     131             : {
     132             :   if (__bos (__dest) != (size_t) -1
     133             :       && (!__builtin_constant_p (__n) || __n <= __bos (__dest)))
     134             :     return __stpncpy_chk (__dest, __src, __n, __bos (__dest));
     135             :   return __stpncpy_alias (__dest, __src, __n);
     136             : }
     137             : 
     138             : 
     139             : __fortify_function char *
     140             : __NTH (strcat (char *__restrict __dest, const char *__restrict __src))
     141             : {
     142             :   return __builtin___strcat_chk (__dest, __src, __bos (__dest));
     143             : }
     144             : 
     145             : 
     146             : __fortify_function char *
     147             : __NTH (strncat (char *__restrict __dest, const char *__restrict __src,
     148             :                 size_t __len))
     149             : {
     150             :   return __builtin___strncat_chk (__dest, __src, __len, __bos (__dest));
     151             : }

Generated by: LCOV version 1.11