LCOV - code coverage report
Current view: top level - src/port - strlcpy.c Coverage Total Hit
Test: PostgreSQL 19devel Lines: 100.0 % 12 12
Test Date: 2026-03-03 10:15:07 Functions: - 0 0
Legend: Lines:     hit not hit

            Line data    Source code
       1              : /*-------------------------------------------------------------------------
       2              :  *
       3              :  * strlcpy.c
       4              :  *    strncpy done right
       5              :  *
       6              :  * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
       7              :  *
       8              :  *
       9              :  * IDENTIFICATION
      10              :  *    src/port/strlcpy.c
      11              :  *
      12              :  * This file was taken from OpenBSD and is used on platforms that don't
      13              :  * provide strlcpy().  The OpenBSD copyright terms follow.
      14              :  *-------------------------------------------------------------------------
      15              :  */
      16              : 
      17              : /*  $OpenBSD: strlcpy.c,v 1.11 2006/05/05 15:27:38 millert Exp $    */
      18              : 
      19              : /*
      20              :  * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
      21              :  *
      22              :  * Permission to use, copy, modify, and distribute this software for any
      23              :  * purpose with or without fee is hereby granted, provided that the above
      24              :  * copyright notice and this permission notice appear in all copies.
      25              :  *
      26              :  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
      27              :  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
      28              :  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
      29              :  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
      30              :  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
      31              :  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
      32              :  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
      33              :  */
      34              : 
      35              : #include "c.h"
      36              : 
      37              : 
      38              : /*
      39              :  * Copy src to string dst of size siz.  At most siz-1 characters
      40              :  * will be copied.  Always NUL terminates (unless siz == 0).
      41              :  * Returns strlen(src); if retval >= siz, truncation occurred.
      42              :  * Function creation history:  http://www.gratisoft.us/todd/papers/strlcpy.html
      43              :  */
      44              : size_t
      45              : strlcpy(char *dst, const char *src, size_t siz)
      46              : {
      47      3870428 :     char       *d = dst;
      48      3870428 :     const char *s = src;
      49      3870428 :     size_t      n = siz;
      50              : 
      51              :     /* Copy as many bytes as will fit */
      52      3870428 :     if (n != 0)
      53              :     {
      54     32321612 :         while (--n != 0)
      55              :         {
      56     32103595 :             if ((*d++ = *s++) == '\0')
      57      3652413 :                 break;
      58              :         }
      59              :     }
      60              : 
      61              :     /* Not enough room in dst, add NUL and traverse rest of src */
      62      3870428 :     if (n == 0)
      63              :     {
      64       218038 :         if (siz != 0)
      65       218038 :             *d = '\0';          /* NUL-terminate dst */
      66      1323556 :         while (*s++)
      67              :             ;
      68              :     }
      69              : 
      70      3870428 :     return (s - src - 1);       /* count does not include NUL */
      71              : }
        

Generated by: LCOV version 2.0-1