Line  | Count  | Source  | 
1  |  | /*  $OpenBSD: strlcpy.c,v 1.5 2001/05/13 15:40:16 deraadt Exp $ */  | 
2  |  |  | 
3  |  | /*  | 
4  |  |  * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>  | 
5  |  |  * All rights reserved.  | 
6  |  |  *  | 
7  |  |  * Redistribution and use in source and binary forms, with or without  | 
8  |  |  * modification, are permitted provided that the following conditions  | 
9  |  |  * are met:  | 
10  |  |  * 1. Redistributions of source code must retain the above copyright  | 
11  |  |  *    notice, this list of conditions and the following disclaimer.  | 
12  |  |  * 2. Redistributions in binary form must reproduce the above copyright  | 
13  |  |  *    notice, this list of conditions and the following disclaimer in the  | 
14  |  |  *    documentation and/or other materials provided with the distribution.  | 
15  |  |  * 3. The name of the author may not be used to endorse or promote products  | 
16  |  |  *    derived from this software without specific prior written permission.  | 
17  |  |  *  | 
18  |  |  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,  | 
19  |  |  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY  | 
20  |  |  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL  | 
21  |  |  * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  | 
22  |  |  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  | 
23  |  |  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;  | 
24  |  |  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,  | 
25  |  |  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR  | 
26  |  |  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF  | 
27  |  |  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  | 
28  |  |  */  | 
29  |  |  | 
30  |  | #if defined(LIBC_SCCS) && !defined(lint)  | 
31  |  | static char *rcsid = "$OpenBSD: strlcpy.c,v 1.5 2001/05/13 15:40:16 deraadt Exp $";  | 
32  |  | #endif /* LIBC_SCCS and not lint */  | 
33  |  |  | 
34  |  | #include "event2/event-config.h"  | 
35  |  | #include "evconfig-private.h"  | 
36  |  |  | 
37  |  | #include <sys/types.h>  | 
38  |  |  | 
39  |  | #ifndef EVENT__HAVE_STRLCPY  | 
40  |  | #include "strlcpy-internal.h"  | 
41  |  |  | 
42  |  | /*  | 
43  |  |  * Copy src to string dst of size siz.  At most siz-1 characters  | 
44  |  |  * will be copied.  Always NUL terminates (unless siz == 0).  | 
45  |  |  * Returns strlen(src); if retval >= siz, truncation occurred.  | 
46  |  |  */  | 
47  |  | size_t event_strlcpy_(char *dst, const char *src, size_t siz)  | 
48  | 0  | { | 
49  | 0  |   register char *d = dst;  | 
50  | 0  |   register const char *s = src;  | 
51  | 0  |   register size_t n = siz;  | 
52  |  |  | 
53  |  |   /* Copy as many bytes as will fit */  | 
54  | 0  |   if (n != 0 && --n != 0) { | 
55  | 0  |     do { | 
56  | 0  |       if ((*d++ = *s++) == 0)  | 
57  | 0  |         break;  | 
58  | 0  |     } while (--n != 0);  | 
59  | 0  |   }  | 
60  |  |  | 
61  |  |   /* Not enough room in dst, add NUL and traverse rest of src */  | 
62  | 0  |   if (n == 0) { | 
63  | 0  |     if (siz != 0)  | 
64  | 0  |       *d = '\0';   /* NUL-terminate dst */  | 
65  | 0  |     while (*s++)  | 
66  | 0  |       ;  | 
67  | 0  |   }  | 
68  |  | 
  | 
69  | 0  |   return (s - src - 1); /* count does not include NUL */  | 
70  | 0  | }  | 
71  |  | #endif  |