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

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

version 1.2, 2008/12/29 18:08:44 version 1.11, 2009/03/16 23:37:28
Line 1 
Line 1 
 /* $Id$ */  /* $Id$ */
 /*  /*
  * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>   * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@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   * purpose with or without fee is hereby granted, provided that the
Line 16 
Line 16 
  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR   * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  * PERFORMANCE OF THIS SOFTWARE.   * PERFORMANCE OF THIS SOFTWARE.
  */   */
   #include <assert.h>
 #include <err.h>  #include <err.h>
 #include <stdlib.h>  #include <stdlib.h>
 #include <string.h>  #include <string.h>
   
 #include "private.h"  #include "private.h"
   
 #ifdef __linux__  /*
 extern  size_t           strlcat(char *, const char *, size_t);   * Contains wrappers for common functions to simplify their general
 extern  size_t           strlcpy(char *, const char *, size_t);   * usage throughout this codebase.
 #endif   */
   
   
 int  int
 xstrcmp(const char *p1, const char *p2)  xstrcmp(const char *p1, const char *p2)
 {  {
Line 35  xstrcmp(const char *p1, const char *p2)
Line 35  xstrcmp(const char *p1, const char *p2)
         return(0 == strcmp(p1, p2));          return(0 == strcmp(p1, p2));
 }  }
   
   
 int  int
 xstrlcat(char *dst, const char *src, size_t sz)  xstrlcat(char *dst, const char *src, size_t sz)
 {  {
Line 43  xstrlcat(char *dst, const char *src, size_t sz)
Line 42  xstrlcat(char *dst, const char *src, size_t sz)
         return(strlcat(dst, src, sz) < sz);          return(strlcat(dst, src, sz) < sz);
 }  }
   
   
 int  int
 xstrlcpy(char *dst, const char *src, size_t sz)  xstrlcpy(char *dst, const char *src, size_t sz)
 {  {
Line 51  xstrlcpy(char *dst, const char *src, size_t sz)
Line 49  xstrlcpy(char *dst, const char *src, size_t sz)
         return(strlcpy(dst, src, sz) < sz);          return(strlcpy(dst, src, sz) < sz);
 }  }
   
   void *
   xrealloc(void *ptr, size_t sz)
   {
           void            *p;
   
           if (NULL == (p = realloc(ptr, sz)))
                   err(EXIT_FAILURE, "realloc");
           return(p);
   }
   
 void *  void *
 xcalloc(size_t num, size_t sz)  xcalloc(size_t num, size_t sz)
Line 63  xcalloc(size_t num, size_t sz)
Line 69  xcalloc(size_t num, size_t sz)
         return(p);          return(p);
 }  }
   
   
 char *  char *
 xstrdup(const char *p)  xstrdup(const char *p)
 {  {
Line 74  xstrdup(const char *p)
Line 79  xstrdup(const char *p)
         return(pp);          return(pp);
 }  }
   
   int
 #ifdef __linux__  xstrlcpys(char *buf, const struct mdoc_node *n, size_t sz)
 /*      $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;          char             *p;
         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 */          assert(sz > 0);
         while (n-- != 0 && *d != '\0')          assert(buf);
                 d++;          *buf = 0;
         dlen = d - dst;  
         n = siz - dlen;  
   
         if (n == 0)          for ( ; n; n = n->next) {
                 return(dlen + strlen(s));                  assert(MDOC_TEXT == n->type);
         while (*s != '\0') {                  p = n->string;
                 if (n != 1) {                  if ( ! xstrlcat(buf, p, sz))
                         *d++ = *s;                          return(0);
                         n--;                  if (n->next && ! xstrlcat(buf, " ", sz))
                 }                          return(0);
                 s++;  
         }          }
         *d = '\0';  
   
         return(dlen + (s - src));       /* count does not include NUL */          return(1);
 }  }
   
   
 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.2  
changed lines
  Added in v.1.11

CVSweb