annotate strlcpy.h @ 284:163e140e74f5 draft

-rpcssl=1 option, allowing secure HTTPS JSON-RPC connections on OSX/Unix. git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@165 1a98c847-1fd6-4fd8-948a-caf3550aa51b
author gavinandresen <gavinandresen@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
date Mon, 11 Oct 2010 18:23:41 +0000
parents bbd929786bd5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
264
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
1 /*
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
2 * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
3 *
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
4 * Permission to use, copy, modify, and distribute this software for any
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
5 * purpose with or without fee is hereby granted, provided that the above
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
6 * copyright notice and this permission notice appear in all copies.
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
7 *
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
15 */
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
16
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
17 /*
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
18 * Copy src to string dst of size siz. At most siz-1 characters
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
19 * will be copied. Always NUL terminates (unless siz == 0).
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
20 * Returns strlen(src); if retval >= siz, truncation occurred.
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
21 */
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
22 inline size_t strlcpy(char *dst, const char *src, size_t siz)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
23 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
24 char *d = dst;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
25 const char *s = src;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
26 size_t n = siz;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
27
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
28 /* Copy as many bytes as will fit */
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
29 if (n != 0)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
30 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
31 while (--n != 0)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
32 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
33 if ((*d++ = *s++) == '\0')
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
34 break;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
35 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
36 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
37
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
38 /* Not enough room in dst, add NUL and traverse rest of src */
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
39 if (n == 0)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
40 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
41 if (siz != 0)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
42 *d = '\0'; /* NUL-terminate dst */
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
43 while (*s++)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
44 ;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
45 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
46
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
47 return(s - src - 1); /* count does not include NUL */
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
48 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
49
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
50 /*
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
51 * Appends src to string dst of size siz (unlike strncat, siz is the
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
52 * full size of dst, not space left). At most siz-1 characters
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
53 * will be copied. Always NUL terminates (unless siz <= strlen(dst)).
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
54 * Returns strlen(src) + MIN(siz, strlen(initial dst)).
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
55 * If retval >= siz, truncation occurred.
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
56 */
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
57 inline size_t strlcat(char *dst, const char *src, size_t siz)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
58 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
59 char *d = dst;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
60 const char *s = src;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
61 size_t n = siz;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
62 size_t dlen;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
63
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
64 /* Find the end of dst and adjust bytes left but don't go past end */
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
65 while (n-- != 0 && *d != '\0')
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
66 d++;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
67 dlen = d - dst;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
68 n = siz - dlen;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
69
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
70 if (n == 0)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
71 return(dlen + strlen(s));
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
72 while (*s != '\0')
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
73 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
74 if (n != 1)
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
75 {
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
76 *d++ = *s;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
77 n--;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
78 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
79 s++;
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
80 }
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
81 *d = '\0';
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
82
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
83 return(dlen + (s - src)); /* count does not include NUL */
bbd929786bd5 propset svn:eol-style native
s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
parents: 11
diff changeset
84 }