LCOV - code coverage report
Current view: top level - usr/include/x86_64-linux-gnu/bits - string_fortified.h (source / functions) Hit Total Coverage
Test: ROSE Lines: 10 12 83.3 %
Date: 2022-12-08 13:48:47 Functions: 0 0 -
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* Copyright (C) 2004-2020 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             :    <https://www.gnu.org/licenses/>.  */
      17             : 
      18             : #ifndef _BITS_STRING_FORTIFIED_H
      19             : #define _BITS_STRING_FORTIFIED_H 1
      20             : 
      21             : #ifndef _STRING_H
      22             : # error "Never use <bits/string_fortified.h> directly; include <string.h> instead."
      23             : #endif
      24             : 
      25             : #if !__GNUC_PREREQ (5,0)
      26             : __warndecl (__warn_memset_zero_len,
      27             :             "memset used with constant zero length parameter; this could be due to transposed parameters");
      28             : #endif
      29             : 
      30             : __fortify_function void *
      31     4772128 : __NTH (memcpy (void *__restrict __dest, const void *__restrict __src,
      32             :                size_t __len))
      33             : {
      34     2997806 :   return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest));
      35             : }
      36             : 
      37             : __fortify_function void *
      38             : __NTH (memmove (void *__dest, const void *__src, size_t __len))
      39             : {
      40             :   return __builtin___memmove_chk (__dest, __src, __len, __bos0 (__dest));
      41             : }
      42             : 
      43             : #ifdef __USE_GNU
      44             : __fortify_function void *
      45             : __NTH (mempcpy (void *__restrict __dest, const void *__restrict __src,
      46             :                 size_t __len))
      47             : {
      48             :   return __builtin___mempcpy_chk (__dest, __src, __len, __bos0 (__dest));
      49             : }
      50             : #endif
      51             : 
      52             : 
      53             : /* The first two tests here help to catch a somewhat common problem
      54             :    where the second and third parameter are transposed.  This is
      55             :    especially problematic if the intended fill value is zero.  In this
      56             :    case no work is done at all.  We detect these problems by referring
      57             :    non-existing functions.  */
      58             : __fortify_function void *
      59    13040685 : __NTH (memset (void *__dest, int __ch, size_t __len))
      60             : {
      61             :   /* GCC-5.0 and newer implements these checks in the compiler, so we don't
      62             :      need them here.  */
      63             : #if !__GNUC_PREREQ (5,0)
      64             :   if (__builtin_constant_p (__len) && __len == 0
      65             :       && (!__builtin_constant_p (__ch) || __ch != 0))
      66             :     {
      67             :       __warn_memset_zero_len ();
      68             :       return __dest;
      69             :     }
      70             : #endif
      71    11751892 :   return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
      72             : }
      73             : 
      74             : #ifdef __USE_MISC
      75             : # include <bits/strings_fortified.h>
      76             : 
      77             : void __explicit_bzero_chk (void *__dest, size_t __len, size_t __destlen)
      78             :   __THROW __nonnull ((1));
      79             : 
      80             : __fortify_function void
      81             : __NTH (explicit_bzero (void *__dest, size_t __len))
      82             : {
      83             :   __explicit_bzero_chk (__dest, __len, __bos0 (__dest));
      84             : }
      85             : #endif
      86             : 
      87             : __fortify_function char *
      88     1804984 : __NTH (strcpy (char *__restrict __dest, const char *__restrict __src))
      89             : {
      90     1804664 :   return __builtin___strcpy_chk (__dest, __src, __bos (__dest));
      91             : }
      92             : 
      93             : #ifdef __USE_GNU
      94             : __fortify_function char *
      95           0 : __NTH (stpcpy (char *__restrict __dest, const char *__restrict __src))
      96             : {
      97           0 :   return __builtin___stpcpy_chk (__dest, __src, __bos (__dest));
      98             : }
      99             : #endif
     100             : 
     101             : 
     102             : __fortify_function char *
     103      190098 : __NTH (strncpy (char *__restrict __dest, const char *__restrict __src,
     104             :                 size_t __len))
     105             : {
     106      190098 :   return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));
     107             : }
     108             : 
     109             : /* XXX We have no corresponding builtin yet.  */
     110             : extern char *__stpncpy_chk (char *__dest, const char *__src, size_t __n,
     111             :                             size_t __destlen) __THROW;
     112             : extern char *__REDIRECT_NTH (__stpncpy_alias, (char *__dest, const char *__src,
     113             :                                                size_t __n), stpncpy);
     114             : 
     115             : __fortify_function char *
     116             : __NTH (stpncpy (char *__dest, const char *__src, size_t __n))
     117             : {
     118             :   if (__bos (__dest) != (size_t) -1
     119             :       && (!__builtin_constant_p (__n) || __n > __bos (__dest)))
     120             :     return __stpncpy_chk (__dest, __src, __n, __bos (__dest));
     121             :   return __stpncpy_alias (__dest, __src, __n);
     122             : }
     123             : 
     124             : 
     125             : __fortify_function char *
     126       89132 : __NTH (strcat (char *__restrict __dest, const char *__restrict __src))
     127             : {
     128       89132 :   return __builtin___strcat_chk (__dest, __src, __bos (__dest));
     129             : }
     130             : 
     131             : 
     132             : __fortify_function char *
     133             : __NTH (strncat (char *__restrict __dest, const char *__restrict __src,
     134             :                 size_t __len))
     135             : {
     136             :   return __builtin___strncat_chk (__dest, __src, __len, __bos (__dest));
     137             : }
     138             : 
     139             : #endif /* bits/string_fortified.h */

Generated by: LCOV version 1.14