back to topotato report
topotato coverage report
Current view: top level - lib - strlcpy.c (source / functions) Hit Total Coverage
Test: test_bgp_minimum_holdtime.py::TestBGPMinimumHoldtime Lines: 8 8 100.0 %
Date: 2023-02-24 18:37:25 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /* Copy a null-terminated string to a fixed-size buffer, with length checking.
       2             :  * Copyright (C) 2016 Free Software Foundation, Inc.
       3             :  * This file is part of the GNU C Library.
       4             :  *
       5             :  * The GNU C Library is free software; you can redistribute it and/or
       6             :  * modify it under the terms of the GNU Lesser General Public
       7             :  * License as published by the Free Software Foundation; either
       8             :  * version 2.1 of the License, or (at your option) any later version.
       9             :  *
      10             :  * The GNU C Library is distributed in the hope that it will be useful,
      11             :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      12             :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      13             :  * Lesser General Public License for more details.
      14             :  *
      15             :  * You should have received a copy of the GNU Lesser General Public
      16             :  * License along with the GNU C Library; if not, see
      17             :  * <http://www.gnu.org/licenses/>.
      18             :  */
      19             : 
      20             : /* adapted for Quagga from glibc patch submission originally from
      21             :  * Florian Weimer <fweimer@redhat.com>, 2016-05-18 */
      22             : 
      23             : #ifdef HAVE_CONFIG_H
      24             : #include "config.h"
      25             : #endif
      26             : 
      27             : #include <string.h>
      28             : 
      29             : #ifndef HAVE_STRLCPY
      30             : #undef strlcpy
      31             : 
      32             : size_t strlcpy(char *__restrict dest,
      33             :                const char *__restrict src, size_t destsize);
      34             : 
      35         201 : size_t strlcpy(char *__restrict dest,
      36             :                const char *__restrict src, size_t destsize)
      37             : {
      38         201 :         size_t src_length = strlen(src);
      39             : 
      40         201 :         if (__builtin_expect(src_length >= destsize, 0)) {
      41           1 :                 if (destsize > 0) {
      42             :                         /*
      43             :                          * Copy the leading portion of the string.  The last
      44             :                          * character is subsequently overwritten with the NUL
      45             :                          * terminator, but the destination destsize is usually
      46             :                          * a multiple of a small power of two, so writing it
      47             :                          * twice should be more efficient than copying an odd
      48             :                          * number of bytes.
      49             :                          */
      50           1 :                         memcpy(dest, src, destsize);
      51           1 :                         dest[destsize - 1] = '\0';
      52             :                 }
      53             :         } else
      54             :                 /* Copy the string and its terminating NUL character.  */
      55         200 :                 memcpy(dest, src, src_length + 1);
      56         201 :         return src_length;
      57             : }
      58             : #endif /* HAVE_STRLCPY */

Generated by: LCOV version v1.16-topotato