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

Diff for /mandoc/compat_strlcpy.c between version 1.1 and 1.6

version 1.1, 2011/07/24 18:15:14 version 1.6, 2020/06/15 20:49:57
Line 1 
Line 1 
 #ifdef HAVE_STRLCPY  /*      $Id$    */
   
 int dummy;  
   
 #else  
   
 /*      $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 21  int dummy;
Line 16  int dummy;
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF   * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.   * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */   */
   #include "config.h"
   
 #include <sys/types.h>  #include <sys/types.h>
 #include <string.h>  #include <string.h>
   
 /*  /*
  * Copy src to string dst of size siz.  At most siz-1 characters   * Copy string src to buffer dst of size dsize.  At most dsize-1
  * will be copied.  Always NUL terminates (unless siz == 0).   * chars will be copied.  Always NUL terminates (unless dsize == 0).
  * Returns strlen(src); if retval >= siz, truncation occurred.   * Returns strlen(src); if retval >= dsize, truncation occurred.
  */   */
 size_t  size_t
 strlcpy(char *dst, const char *src, size_t siz)  strlcpy(char *dst, const char *src, size_t dsize)
 {  {
         char *d = dst;          const char *osrc = src;
         const char *s = src;          size_t nleft = dsize;
         size_t n = siz;  
   
         /* Copy as many bytes as will fit */          /* Copy as many bytes as will fit. */
         if (n != 0) {          if (nleft != 0) {
                 while (--n != 0) {                  while (--nleft != 0) {
                         if ((*d++ = *s++) == '\0')                          if ((*dst++ = *src++) == '\0')
                                 break;                                  break;
                 }                  }
         }          }
   
         /* Not enough room in dst, add NUL and traverse rest of src */          /* Not enough room in dst, add NUL and traverse rest of src. */
         if (n == 0) {          if (nleft == 0) {
                 if (siz != 0)                  if (dsize != 0)
                         *d = '\0';              /* NUL-terminate dst */                          *dst = '\0';            /* NUL-terminate dst */
                 while (*s++)                  while (*src++)
                         ;                          ;
         }          }
   
         return(s - src - 1);    /* count does not include NUL */          return(src - osrc - 1); /* count does not include NUL */
 }  }
   
 #endif  

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

CVSweb