annotate port/C/extern/strlcpy.c @ 563:668975a91fb2

Misc: add executable.cpp, get the executable path
author David Demelier <markand@malikania.fr>
date Tue, 21 Jun 2016 15:55:57 +0200
parents dc1b5143c5e3
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 * Copy src to string dst of size siz. At most siz-1 characters
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 * will be copied. Always NUL terminates (unless siz == 0).
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 * Returns strlen(src); if retval >= siz, truncation occurred.
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 */
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 size_t
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 strlcpy(char *dst, const char *src, size_t siz)
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 {
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 char *d = dst;
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 const char *s = src;
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 size_t n = siz;
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
31
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 /* Copy as many bytes as will fit */
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 if (n != 0) {
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 while (--n != 0) {
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 if ((*d++ = *s++) == '\0')
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 break;
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 }
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 }
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
39
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 /* Not enough room in dst, add NUL and traverse rest of src */
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 if (siz != 0)
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 *d = '\0'; /* NUL-terminate dst */
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 while (*s++)
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 ;
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 }
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 return(s - src - 1); /* count does not include NUL */
996337564c4d Import OpenBSD strlcpy and strlcat
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 }