annotate port/C/extern/strlcat.c @ 543:dc1b5143c5e3

Misc: new hierarchy
author David Demelier <markand@malikania.fr>
date Mon, 13 Jun 2016 16:13:40 +0200
parents port/extern/strlcat.c@996337564c4d
children 266f32919d0a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
157
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 * Copyright (c) 2012 David Demelier <markand@malikania.fr>
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 *
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 * Permission to use, copy, modify, and distribute this software for any
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * purpose with or without fee is hereby granted, provided that the above
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * copyright notice and this permission notice appear in all copies.
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 *
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 */
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
17
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
18 #include <stddef.h>
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
19
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 /*
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 * Appends src to string dst of size siz (unlike strncat, siz is the
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 * full size of dst, not space left). At most siz-1 characters
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 * will be copied. Always NUL terminates (unless siz <= strlen(dst)).
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 * Returns strlen(src) + MIN(siz, strlen(initial dst)).
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 * If retval >= siz, truncation occurred.
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 */
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 size_t
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 strlcat(char *dst, const char *src, size_t siz)
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 {
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 char *d = dst;
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 const char *s = src;
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 size_t n = siz;
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 size_t dlen;
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
34
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 /* Find the end of dst and adjust bytes left but don't go past end */
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 while (n-- != 0 && *d != '\0')
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 d++;
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 dlen = d - dst;
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 n = siz - dlen;
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
40
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 if (n == 0)
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 return(dlen + strlen(s));
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 while (*s != '\0') {
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 if (n != 1) {
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 *d++ = *s;
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 n--;
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 }
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 s++;
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 }
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 *d = '\0';
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
51
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 return(dlen + (s - src)); /* count does not include NUL */
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 }