Annotation of embedaddon/pimd/libite/strlcat.c, revision 1.1.1.1
1.1 misho 1: /* $OpenBSD: strlcat.c,v 1.15 2015/03/02 21:41:08 millert Exp $ */
2:
3: /*
4: * Copyright (c) 1998, 2015 Todd C. Miller <Todd.Miller@courtesan.com>
5: *
6: * Permission to use, copy, modify, and distribute this software for any
7: * purpose with or without fee is hereby granted, provided that the above
8: * copyright notice and this permission notice appear in all copies.
9: *
10: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17: */
18:
19: #include <sys/types.h>
20: #include <string.h>
21:
22: #ifndef strlcat
23: /*
24: * Appends src to string dst of size dsize (unlike strncat, dsize is the
25: * full size of dst, not space left). At most dsize-1 characters
26: * will be copied. Always NUL terminates (unless dsize <= strlen(dst)).
27: * Returns strlen(src) + MIN(dsize, strlen(initial dst)).
28: * If retval >= dsize, truncation occurred.
29: */
30: size_t
31: strlcat(char *dst, const char *src, size_t dsize)
32: {
33: const char *odst = dst;
34: const char *osrc = src;
35: size_t n = dsize;
36: size_t dlen;
37:
38: /* Find the end of dst and adjust bytes left but don't go past end. */
39: while (n-- != 0 && *dst != '\0')
40: dst++;
41: dlen = dst - odst;
42: n = dsize - dlen;
43:
44: if (n-- == 0)
45: return(dlen + strlen(src));
46: while (*src != '\0') {
47: if (n != 0) {
48: *dst++ = *src;
49: n--;
50: }
51: src++;
52: }
53: *dst = '\0';
54:
55: return(dlen + (src - osrc)); /* count does not include NUL */
56: }
57: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>