LCOV - code coverage report
Current view: top level - lib/libkern - strlcat.c (source / functions) Hit Total Coverage
Test: 6.4 Lines: 0 16 0.0 %
Date: 2018-10-19 03:25:38 Functions: 0 1 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*      $OpenBSD: strlcat.c,v 1.8 2015/01/15 03:54:28 millert Exp $     */
       2             : 
       3             : /*
       4             :  * Copyright (c) 1998, 2015 Todd C. Miller <Todd.Miller@courtesan.com>
       5             :  *
       6             :  * Permission to use, copy, modify, and distribute this software for any
       7             :  * purpose with or without fee is hereby granted, provided that the above
       8             :  * copyright notice and this permission notice appear in all copies.
       9             :  *
      10             :  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
      11             :  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
      12             :  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
      13             :  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
      14             :  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
      15             :  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
      16             :  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
      17             :  */
      18             : 
      19             : #include <lib/libkern/libkern.h>
      20             : 
      21             : /*
      22             :  * Appends src to string dst of size dsize (unlike strncat, dsize is the
      23             :  * full size of dst, not space left).  At most dsize-1 characters
      24             :  * will be copied.  Always NUL terminates (unless dsize <= strlen(dst)).
      25             :  * Returns strlen(src) + MIN(dsize, strlen(initial dst)).
      26             :  * If retval >= siz, truncation occurred.
      27             :  */
      28             : size_t
      29           0 : strlcat(char *dst, const char *src, size_t dsize)
      30             : {
      31             :         const char *odst = dst;
      32             :         const char *osrc = src;
      33             :         size_t n = dsize;
      34             :         size_t dlen;
      35             : 
      36             :         /* Find the end of dst and adjust bytes left but don't go past end. */
      37           0 :         while (n-- != 0 && *dst != '\0')
      38           0 :                 dst++;
      39           0 :         dlen = dst - odst;
      40           0 :         n = dsize - dlen;
      41             : 
      42           0 :         if (n-- == 0)
      43           0 :                 return(dlen + strlen(src));
      44           0 :         while (*src != '\0') {
      45           0 :                 if (n != 0) {
      46           0 :                         *dst++ = *src;
      47           0 :                         n--;
      48           0 :                 }
      49           0 :                 src++;
      50             :         }
      51           0 :         *dst = '\0';
      52             : 
      53           0 :         return(dlen + (src - osrc));    /* count does not include NUL */
      54           0 : }

Generated by: LCOV version 1.13