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

Diff for /mandoc/Attic/xstd.c between version 1.1 and 1.2

version 1.1, 2008/12/23 05:30:49 version 1.2, 2008/12/29 18:08:44
Line 22 
Line 22 
   
 #include "private.h"  #include "private.h"
   
   #ifdef __linux__
   extern  size_t           strlcat(char *, const char *, size_t);
   extern  size_t           strlcpy(char *, const char *, size_t);
   #endif
   
   
 int  int
 xstrcmp(const char *p1, const char *p2)  xstrcmp(const char *p1, const char *p2)
 {  {
Line 69  xstrdup(const char *p)
Line 74  xstrdup(const char *p)
         return(pp);          return(pp);
 }  }
   
   
   #ifdef __linux__
   /*      $OpenBSD$       */
   
   /*
    * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
    *
    * Permission to use, copy, modify, and distribute this software for any
    * purpose with or without fee is hereby granted, provided that the above
    * copyright notice and this permission notice appear in all copies.
    *
    * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    */
   
   #include <sys/types.h>
   #include <string.h>
   
   
   size_t
   strlcat(char *dst, const char *src, size_t siz)
   {
           char *d = dst;
           const char *s = src;
           size_t n = siz;
           size_t dlen;
   
           /* Find the end of dst and adjust bytes left but don't go past end */
           while (n-- != 0 && *d != '\0')
                   d++;
           dlen = d - dst;
           n = siz - dlen;
   
           if (n == 0)
                   return(dlen + strlen(s));
           while (*s != '\0') {
                   if (n != 1) {
                           *d++ = *s;
                           n--;
                   }
                   s++;
           }
           *d = '\0';
   
           return(dlen + (s - src));       /* count does not include NUL */
   }
   
   
   size_t
   strlcpy(char *dst, const char *src, size_t siz)
   {
           char *d = dst;
           const char *s = src;
           size_t n = siz;
   
           /* Copy as many bytes as will fit */
           if (n != 0) {
                   while (--n != 0) {
                           if ((*d++ = *s++) == '\0')
                                   break;
                   }
           }
   
           /* Not enough room in dst, add NUL and traverse rest of src */
           if (n == 0) {
                   if (siz != 0)
                           *d = '\0';              /* NUL-terminate dst */
                   while (*s++)
                           ;
           }
   
           return(s - src - 1);    /* count does not include NUL */
   }
   #endif

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

CVSweb