Loading...
--- Libc/Libc-1725.40.4/string/FreeBSD/strlcpy.3
+++ Libc/Libc-320/string/FreeBSD/strlcpy.3
@@ -1,18 +1,18 @@
-.\" $OpenBSD: strlcpy.3,v 1.26 2013/09/30 12:02:35 millert Exp $
-.\"
-.\" Copyright (c) 1998, 2000 Todd C. Miller <Todd.Miller@courtesan.com>
-.\"
-.\" Permission to use, copy, modify, and distribute this software for any
-.\" purpose with or without fee is hereby granted, provided that the above
-.\" copyright notice and this permission notice appear in all copies.
-.\"
-.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+.\" $OpenBSD: strlcpy.3,v 1.5 1999/06/06 15:17:32 aaron Exp $
+.\"
+.\" Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" 3. The name of the author may not be used to endorse or promote products
+.\" derived from this software without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
.\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
@@ -25,9 +25,9 @@
.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
.\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
-.Dd February 26, 2016
+.\" $FreeBSD: src/lib/libc/string/strlcpy.3,v 1.12 2002/12/18 12:45:11 ru Exp $
+.\"
+.Dd June 22, 1998
.Dt STRLCPY 3
.Os
.Sh NAME
@@ -39,35 +39,40 @@
.Sh SYNOPSIS
.In string.h
.Ft size_t
-.Fn strlcpy "char * restrict dst" "const char * restrict src" "size_t dstsize"
+.Fn strlcpy "char *dst" "const char *src" "size_t size"
.Ft size_t
-.Fn strlcat "char * restrict dst" "const char * restrict src" "size_t dstsize"
+.Fn strlcat "char *dst" "const char *src" "size_t size"
.Sh DESCRIPTION
The
.Fn strlcpy
and
.Fn strlcat
-functions copy and concatenate strings with the
-same input parameters and output result as
-.Xr snprintf 3 .
-They are designed to be safer, more consistent, and less error
-prone replacements for the easily misused functions
+functions copy and concatenate strings respectively. They are designed
+to be safer, more consistent, and less error prone replacements for
.Xr strncpy 3
and
.Xr strncat 3 .
-.Pp
-.Fn strlcpy
-and
-.Fn strlcat
-take the full size of the destination buffer and guarantee
-NUL-termination if there is room.
-Note that room for the NUL should be included in
-.Fa dstsize .
+Unlike those functions,
+.Fn strlcpy
+and
+.Fn strlcat
+take the full size of the buffer (not just the length) and guarantee to
+NUL-terminate the result (as long as
+.Fa size
+is larger than 0 or, in the case of
+.Fn strlcat ,
+as long as there is at least one byte free in
+.Fa dst ) .
+Note that you should include a byte for the NUL in
+.Fa size .
Also note that
.Fn strlcpy
and
.Fn strlcat
-only operate on true ''C'' strings. This means that for
+only operate on true
+.Dq C
+strings.
+This means that for
.Fn strlcpy
.Fa src
must be NUL-terminated and for
@@ -75,68 +80,35 @@
both
.Fa src
and
-.Fn dst
+.Fa dst
must be NUL-terminated.
.Pp
-.Fn strlcpy
-copies up to
-.Fa dstsize
-\- 1 characters from the string
+The
+.Fn strlcpy
+function copies up to
+.Fa size
+- 1 characters from the NUL-terminated string
.Fa src
to
.Fa dst ,
-NUL-terminating the result if
-.Fa dstsize
-is not 0.
-.Pp
-.Fn strlcat
-appends string
+NUL-terminating the result.
+.Pp
+The
+.Fn strlcat
+function appends the NUL-terminated string
.Fa src
to the end of
.Fa dst .
It will append at most
-.Fa dstsize
-\- strlen(dst) \- 1 characters.
-It will then NUL-terminate, unless
-.Fa dstsize
-is 0 or the original
-.Fa dst
-string was longer than
-.Fa dstsize
-(in practice this should not happen
-as it means that either
-.Fa dstsize
-is incorrect or that
-.Fa dst
-is not a proper string).
-.Pp
-If the
-.Fa src
-and
-.Fa dst
-strings overlap, the behavior is undefined.
+.Fa size
+- strlen(dst) - 1 bytes, NUL-terminating the result.
.Sh RETURN VALUES
-Besides quibbles over the return type
-.Pf ( Va size_t
-versus
-.Va int )
-and signal handler safety
-.Pf ( Xr snprintf 3
-is not entirely safe on some systems), the
-following two are equivalent:
-.Bd -literal -offset indent
-n = strlcpy(dst, src, len);
-n = snprintf(dst, len, "%s", src);
-.Ed
-.Pp
-Like
-.Xr snprintf 3 ,
-the
-.Fn strlcpy
-and
-.Fn strlcat
-functions return the total length of the string they tried to create.
-For
+The
+.Fn strlcpy
+and
+.Fn strlcat
+functions return the total length of the string they tried to
+create. For
.Fn strlcpy
that means the length of
.Fa src .
@@ -147,12 +119,29 @@
plus
the length of
.Fa src .
-.Pp
-If the return value is
-.Cm >=
-.Va dstsize ,
-the output string has been truncated.
-It is the caller's responsibility to handle this.
+While this may seem somewhat confusing it was done to make
+truncation detection simple.
+.Pp
+Note however, that if
+.Fn strlcat
+traverses
+.Fa size
+characters without finding a NUL, the length of the string is considered
+to be
+.Fa size
+and the destination string will not be NUL-terminated (since there was
+no space for the NUL).
+This keeps
+.Fn strlcat
+from running off the end of a string.
+In practice this should not happen (as it means that either
+.Fa size
+is incorrect or that
+.Fa dst
+is not a proper
+.Dq C
+string).
+The check exists to prevent potential security problems in incorrect code.
.Sh EXAMPLES
The following code fragment illustrates the simple case:
.Bd -literal -offset indent
@@ -177,8 +166,8 @@
goto toolong;
.Ed
.Pp
-Since it is known how many characters were copied the first time, things
-can be sped up a bit by using a copy instead of an append:
+Since we know how many characters we copied the first time, we can
+speed things up a bit by using a copy instead of an append:
.Bd -literal -offset indent
char *dir, *file, pname[MAXPATHLEN];
size_t n;
@@ -201,8 +190,7 @@
.Sh SEE ALSO
.Xr snprintf 3 ,
.Xr strncat 3 ,
-.Xr strncpy 3 ,
-.Xr wcslcpy 3
+.Xr strncpy 3
.Sh HISTORY
The
.Fn strlcpy
@@ -210,5 +198,5 @@
.Fn strlcat
functions first appeared in
.Ox 2.4 ,
-and
+and made their appearance in
.Fx 3.3 .