git: 667fa9c40483 - stable/14 - lib/libc/string: document restrict qualification of memccpy() arguments

From: Robert Clausecker <fuz_at_FreeBSD.org>
Date: Wed, 24 Jan 2024 19:44:57 UTC
The branch stable/14 has been updated by fuz:

URL: https://cgit.FreeBSD.org/src/commit/?id=667fa9c40483f2c844a7960780e9567be4e581d5

commit 667fa9c40483f2c844a7960780e9567be4e581d5
Author:     Robert Clausecker <fuz@FreeBSD.org>
AuthorDate: 2023-12-05 14:03:28 +0000
Commit:     Robert Clausecker <fuz@FreeBSD.org>
CommitDate: 2024-01-24 19:39:30 +0000

    lib/libc/string: document restrict qualification of memccpy() arguments
    
    POSIX.1-2004 and the upcoming C23 agree that memccpy()'s arguments
    are restrict qualified and must not overlap.  In 2002, restrict
    qualifiers were added to <string.h>'s declaration of the function.
    Make things official and document that the arguments must not
    overlap.
    
    See also:       61b60edfd3fff20f884419f8097870c7045315c9
    Approved by:    kib
    MFC after:      1 month
    MFC to:         stable/14
    
    (cherry picked from commit e0d4f419ac41aa91b862f3ceadc32a86abf08572)
---
 lib/libc/string/bstring.3 | 10 ++++++++--
 lib/libc/string/memccpy.3 | 33 ++++++++++++++++++++++++++++++---
 lib/libc/string/memccpy.c |  2 +-
 3 files changed, 39 insertions(+), 6 deletions(-)

diff --git a/lib/libc/string/bstring.3 b/lib/libc/string/bstring.3
index cb29a6db6b14..bb1a0505fafd 100644
--- a/lib/libc/string/bstring.3
+++ b/lib/libc/string/bstring.3
@@ -29,7 +29,7 @@
 .\"
 .\"     @(#)bstring.3	8.1 (Berkeley) 6/4/93
 .\"
-.Dd June 4, 1993
+.Dd December 5, 2023
 .Dt BSTRING 3
 .Os
 .Sh NAME
@@ -58,7 +58,12 @@
 .Ft int
 .Fn memcmp "const void *b1" "const void *b2" "size_t len"
 .Ft void *
-.Fn memccpy "void *dst" "const void *src" "int c" "size_t len"
+.Fo memccpy
+.Fa "void * restrict dst"
+.Fa "const void * restrict src"
+.Fa "int c"
+.Fa "size_t len"
+.Fc
 .Ft void *
 .Fn memcpy "void *dst" "const void *src" "size_t len"
 .Ft void *
@@ -80,6 +85,7 @@ See the specific manual pages for more information.
 .Xr memccpy 3 ,
 .Xr memchr 3 ,
 .Xr memcmp 3 ,
+.Xr memccpy 3 ,
 .Xr memcpy 3 ,
 .Xr memmove 3 ,
 .Xr memset 3
diff --git a/lib/libc/string/memccpy.3 b/lib/libc/string/memccpy.3
index fb2409ada846..fe543d9172d3 100644
--- a/lib/libc/string/memccpy.3
+++ b/lib/libc/string/memccpy.3
@@ -27,7 +27,7 @@
 .\"
 .\"     @(#)memccpy.3	8.1 (Berkeley) 6/9/93
 .\"
-.Dd June 9, 1993
+.Dd December 5, 2023
 .Dt MEMCCPY 3
 .Os
 .Sh NAME
@@ -38,7 +38,12 @@
 .Sh SYNOPSIS
 .In string.h
 .Ft void *
-.Fn memccpy "void *dst" "const void *src" "int c" "size_t len"
+.Fo memccpy
+.Fa "void * restrict dst"
+.Fa "const void * restrict src"
+.Fa "int c"
+.Fa "size_t len"
+.Fc
 .Sh DESCRIPTION
 The
 .Fn memccpy
@@ -61,13 +66,35 @@ is returned.
 Otherwise,
 .Fa len
 bytes are copied, and a NULL pointer is returned.
+If
+.Fa src
+and
+.Fa dst
+overlap, behavior is undefined.
 .Sh SEE ALSO
 .Xr bcopy 3 ,
 .Xr memcpy 3 ,
 .Xr memmove 3 ,
 .Xr strcpy 3
+.Sh STANDARDS
+The
+.Fn memccpy
+function conforms to
+.St -p1003.1-2004
+and
+.\" St -isoC-2024 .
+ISO/IEC 9899:2024 (\(lqISO\~C23\(rq).
 .Sh HISTORY
 The
 .Fn memccpy
 function first appeared in
-.Bx 4.4 .
+.Bx 4.4
+and was first specified in the
+.\" St -svid1 .
+System\~V Interface Definition, First Edition (\(lqSVID1\(rq).
+The
+.Ft restrict
+keyword was added to the prototype in
+.Fx 5.0.0
+in accordance with the updated specification of
+.St -p1003.1-2004 .
diff --git a/lib/libc/string/memccpy.c b/lib/libc/string/memccpy.c
index fd080d4293f4..5ef2dd6567ca 100644
--- a/lib/libc/string/memccpy.c
+++ b/lib/libc/string/memccpy.c
@@ -35,7 +35,7 @@ static char sccsid[] = "@(#)memccpy.c	8.1 (Berkeley) 6/4/93";
 #include <string.h>
 
 void *
-memccpy(void *t, const void *f, int c, size_t n)
+memccpy(void * restrict t, const void * restrict f, int c, size_t n)
 {
 
 	if (n) {