"Fossies" - the Fresh Open Source Software Archive

Member "amavisd-milter-1.7.2/compat/strlcpy.c" (6 Jan 2019, 1834 Bytes) of package /linux/privat/amavisd-milter-1.7.2.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    1 /* OPENBSD ORIGINAL: lib/libc/string/strlcpy.c */
    2 
    3 /*  $OpenBSD: strlcpy.c,v 1.8 2003/06/17 21:56:24 millert Exp $ */
    4 
    5 /*
    6  * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
    7  *
    8  * Permission to use, copy, modify, and distribute this software for any
    9  * purpose with or without fee is hereby granted, provided that the above
   10  * copyright notice and this permission notice appear in all copies.
   11  *
   12  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
   13  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
   14  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
   15  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
   16  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
   17  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
   18  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
   19  */
   20 
   21 #include "compat.h"
   22 
   23 #if defined(LIBC_SCCS) && !defined(lint)
   24 static char *rcsid = "$OpenBSD: strlcpy.c,v 1.8 2003/06/17 21:56:24 millert Exp $";
   25 #endif /* LIBC_SCCS and not lint */
   26 
   27 #include <sys/types.h>
   28 #include <string.h>
   29 
   30 /*
   31  * Copy src to string dst of size siz.  At most siz-1 characters
   32  * will be copied.  Always NUL terminates (unless siz == 0).
   33  * Returns strlen(src); if retval >= siz, truncation occurred.
   34  */
   35 size_t
   36 strlcpy(char *dst, const char *src, size_t siz)
   37 {
   38     register char *d = dst;
   39     register const char *s = src;
   40     register size_t n = siz;
   41 
   42     /* Copy as many bytes as will fit */
   43     if (n != 0 && --n != 0) {
   44         do {
   45             if ((*d++ = *s++) == 0)
   46                 break;
   47         } while (--n != 0);
   48     }
   49 
   50     /* Not enough room in dst, add NUL and traverse rest of src */
   51     if (n == 0) {
   52         if (siz != 0)
   53             *d = '\0';      /* NUL-terminate dst */
   54         while (*s++)
   55             ;
   56     }
   57 
   58     return(s - src - 1);    /* count does not include NUL */
   59 }