Loading...
string/FreeBSD/strlcpy.3 Libc-1725.40.4 Libc-320
--- 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 .