[BACK]Return to compat_strlcat.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/compat_strlcat.c between version 1.5 and 1.6

version 1.5, 2020/06/15 01:37:15 version 1.6, 2020/06/15 20:49:57
Line 2 
Line 2 
 /*      $OpenBSD$       */  /*      $OpenBSD$       */
   
 /*  /*
  * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>   * Copyright (c) 1998, 2015 Todd C. Miller <millert@openbsd.org>
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above   * purpose with or without fee is hereby granted, provided that the above
Line 22 
Line 22 
 #include <string.h>  #include <string.h>
   
 /*  /*
  * Appends src to string dst of size siz (unlike strncat, siz is the   * Appends src to string dst of size dsize (unlike strncat, dsize is the
  * full size of dst, not space left).  At most siz-1 characters   * full size of dst, not space left).  At most dsize-1 characters
  * will be copied.  Always NUL terminates (unless siz <= strlen(dst)).   * will be copied.  Always NUL terminates (unless dsize <= strlen(dst)).
  * Returns strlen(src) + MIN(siz, strlen(initial dst)).   * Returns strlen(src) + MIN(dsize, strlen(initial dst)).
  * If retval >= siz, truncation occurred.   * If retval >= dsize, truncation occurred.
  */   */
 size_t  size_t
 strlcat(char *dst, const char *src, size_t siz)  strlcat(char *dst, const char *src, size_t dsize)
 {  {
         char *d = dst;          const char *odst = dst;
         const char *s = src;          const char *osrc = src;
         size_t n = siz;          size_t n = dsize;
         size_t dlen;          size_t dlen;
   
         /* Find the end of dst and adjust bytes left but don't go past end */          /* Find the end of dst and adjust bytes left but don't go past end. */
         while (n-- != 0 && *d != '\0')          while (n-- != 0 && *dst != '\0')
                 d++;                  dst++;
         dlen = d - dst;          dlen = dst - odst;
         n = siz - dlen;          n = dsize - dlen;
   
         if (n == 0)          if (n-- == 0)
                 return(dlen + strlen(s));                  return(dlen + strlen(src));
         while (*s != '\0') {          while (*src != '\0') {
                 if (n != 1) {                  if (n != 0) {
                         *d++ = *s;                          *dst++ = *src;
                         n--;                          n--;
                 }                  }
                 s++;                  src++;
         }          }
         *d = '\0';          *dst = '\0';
   
         return(dlen + (s - src));       /* count does not include NUL */          return(dlen + (src - osrc));    /* count does not include NUL */
 }  }

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.6

CVSweb