From nobody Tue Oct 07 16:24:11 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4ch1fz2b27z6BZ0D; Tue, 07 Oct 2025 16:24:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ch1fz1fz3z3dbx; Tue, 07 Oct 2025 16:24:11 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1759854251; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=cdtEzMfvPJB7Rm0fDXkLfIhabbLmCP5LB9JdPH/Shmk=; b=WLHoYNQRJhuyoxS3dbUufnoWTjhLlSkIPgn1lzLSUPyV9KRKmAG/YMnam8bMm3JT0hCT6S 8eC/Dhb4I6LIzdBpp8imTOamclxbZxR5esi4yMzDjs+RBiDo1aNDq2fgdrXb1wXG+1JdgH Qe9rOpxYMV000w7c8eraYYIrinuDZDs6tdv/7drQB+/usmrsyo8pQlTyzNScQpaX8ruQta a6pV8tJPLejzgUJtpu0uvsAAqPJX7FWcAFj4kflsWEM9YKQM+wXK1oEzdsBSzkOWTq7eVw XGIjO3LCpbiyJPtcYGyKvh1O2JJtHVmhWRpT8Tk1gvZPpJ4w83pn77ZR09dwjg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1759854251; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=cdtEzMfvPJB7Rm0fDXkLfIhabbLmCP5LB9JdPH/Shmk=; b=F0zv1mqoV0waPQNstOmjzDHlkGXGgIbYyXHOPHhLR41iIeJGnmoZf0AKtIbXCIXHsMdQ41 h/yheMWQmLvn6MxjtTU4SvjWY4NF1OHvd4fQTNAdHXqXwqu2twMv8mwn4BA/y2caEpL6m2 nifVW8zlcITLrFIZnMtiErPpiSBR8s1xjito8DGHYEQ9avbohPtNJv7jkMMD1kI3/IOC6L smqHk8dYRdhgmGoc7aUdUBculmk9oY0tj/F72AbGc2CYkhh6d0vOPqQH4r38cwmC3NTN37 aiLPrg36kAJwtTNNme/7nIEKjpDxEsSowbSP319nQFvre7FeKzFcVsQHihBDYw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1759854251; a=rsa-sha256; cv=none; b=a3FKws6VKRlw867btDbKqj71O0dUUV5KqT+1tH4UWkSRqqbHMcg2cOuddXCyiqS7IjIS8p /oPX1FAimDB+JitcxZEKxO5ZUAKYK8/h1leY5iMK8hlSLjTsMxd6HvF2g6TdgLiHrLu/3M 9DK59cCSB5Ysbw7Vgn+bQGVhitXyqxXltJZ7jpFZZX6uWfamr/Srp4xyYp/mI7NHKHJIU4 /bc9WpLhpxatk6Gc+qHVLh8cCIabVu5gUT1/ptdcEH8zFeMN+aSmq6/28ujqKTVkk9AT1L C0i8ZmtQZ5wW4sn619weWxeoAmJL14jaMwpaGHz+zxwiORkpXnZcbUwiQM+J0w== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4ch1fz1BRrzsmQ; Tue, 07 Oct 2025 16:24:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 597GOBhk077506; Tue, 7 Oct 2025 16:24:11 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 597GOBb1077503; Tue, 7 Oct 2025 16:24:11 GMT (envelope-from git) Date: Tue, 7 Oct 2025 16:24:11 GMT Message-Id: <202510071624.597GOBb1077503@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dag-Erling =?utf-8?Q?Sm=C3=B8rgrav?= Subject: git: a802334d86c7 - main - fts: Further improve the manual page List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: a802334d86c7173ddd7776a20065bd5682f25f67 Auto-Submitted: auto-generated The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=a802334d86c7173ddd7776a20065bd5682f25f67 commit a802334d86c7173ddd7776a20065bd5682f25f67 Author: Dag-Erling Smørgrav AuthorDate: 2025-10-07 16:23:33 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2025-10-07 16:23:58 +0000 fts: Further improve the manual page * Add subsections for the three functions that didn't already have one. * Add a RETURN VALUES section. * Improve the grammar somewhat. * Clarify that fts_read() will not set errno to 0 if called again after having already returned NULL. Sponsored by: Klara, Inc. Reviewed by: bcr, markj Differential Revision: https://reviews.freebsd.org/D52925 --- lib/libc/gen/fts.3 | 146 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 129 insertions(+), 17 deletions(-) diff --git a/lib/libc/gen/fts.3 b/lib/libc/gen/fts.3 index b937607b48e0..da304e59ee72 100644 --- a/lib/libc/gen/fts.3 +++ b/lib/libc/gen/fts.3 @@ -25,7 +25,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd October 1, 2025 +.Dd October 6, 2025 .Dt FTS 3 .Os .Sh NAME @@ -69,14 +69,15 @@ on a file hierarchy, which is then supplied to the other .Nm functions. -The function +The .Fn fts_read -returns a pointer to a structure describing one of the files in the file -hierarchy. -The function +function returns a pointer to a structure describing one of the files +in the file hierarchy. +The .Fn fts_children -returns a pointer to a linked list of structures, each of which describes -one of the files contained in a directory in the hierarchy. +function returns a pointer to a linked list of structures, each of +which describes one of the files contained in a directory in the +hierarchy. In general, directories are visited two distinguishable times; in pre-order (before any of their descendants are visited) and in post-order (after all of their descendants have been visited). @@ -544,10 +545,10 @@ from descending into directories that have a different device number than the file from which the descent began. .El .Pp -The argument -.Fn compar -specifies a user-defined function which may be used to order the traversal -of the hierarchy. +The +.Fa compar +argument points to a user-defined function which may be used to order +the traversal of the hierarchy. It takes two pointers to pointers to .Vt FTSENT @@ -625,6 +626,15 @@ structure is returned, and .Va errno may or may not have been set (see .Fa fts_info ) . +Note that +.Fn fts_read +will not set +.Va errno +to 0 if called again with the same +.Fa ftsp +argument after the +.Dv FTS_STOP +flag has been set or the end of the stream has been reached. .Pp The .Vt FTSENT @@ -639,9 +649,9 @@ directory, in which case they will not be overwritten until after a call to .Fn fts_read after the .Vt FTSENT -structure has been returned by the function +structure has been returned by the .Fn fts_read -in post-order. +function in post-order. .Ss Fn fts_children The .Fn fts_children @@ -717,10 +727,10 @@ and fields. .El .Ss Fn fts_set -The function +The .Fn fts_set -allows the user application to determine further processing for the -file +function allows the user application to determine further processing +for the file .Fa f of the stream .Fa ftsp . @@ -786,6 +796,39 @@ The file may be one of those most recently returned by either or .Fn fts_read . .El +.Ss Fn fts_set_clientptr , Fn fts_get_clientptr +The +.Fn fts_set_clientptr +function sets the client data pointer for the stream +.Fa ftsp +to +.Fa clientdata . +The +.Fn fts_get_clientptr +function returns the client data pointer associated with +.Fa ftsp . +This can be used to pass per-stream data to the comparison function. +.Pp +For performance reasons, +.Fn fts_get_clientptr +may be shadowed by a preprocessor macro. +.Ss Fn fts_get_stream +The +.Fn fts_get_stream +function returns the +.Nm +stream associated with the file entry +.Fa f . +A typical use for this would be for a comparison function to first call +.Fn fts_get_stream +on one of its arguments, then call +.Fn fts_get_clientptr +to obtain the client data pointer, which in turn points to information +necessary to correctly order the two entries. +.Pp +For performance reasons, +.Fn fts_get_stream +may be shadowed by a preprocessor macro. .Ss Fn fts_close The .Fn fts_close @@ -797,6 +840,75 @@ or .Fn fts_open_b was called to open .Fa ftsp . +.Sh RETURN VALUES +The +.Fn fts_open +and +.Fn fts_open_b +functions return a pointer to the new +.Nm +stream on success and +.Dv NULL +on failure. +.Pp +The +.Fn fts_read +function returns a pointer to the next file entry on success, or if an +error occurs that relates specifically to that file entry. +On reaching the end of the file hierarchy, it returns +.Dv NULL +and sets the external variable +.Va errno +to 0. +On failure, it returns +.Dv NULL +and sets +.Va errno +to an appropriate non-zero value. +If called again after the +.Dv FTS_STOP +flag has been set or the end of the stream has been reached, +.Fn fts_read +returns +.Dv NULL +and leaves +.Va errno +untouched. +.Pp +The +.Fn fts_children +function returns a pointer to a linked list of file entries on +success. +On reaching the end of the file hierarchy, it returns +.Dv NULL +and sets the external variable +.Va errno +to 0. +On failure, it returns +.Dv NULL +and sets +.Va errno +to an appropriate non-zero value. +.Pp +The +.Fn fts_set +function returns 0 on success and \-1 if its +.Fa instr +argument is invalid. +.Pp +The +.Fn fts_get_clientptr +function returns the client data pointer associated with its argument, +or +.Dv NULL +if none has been set. +.Pp +The +.Fn fts_get_stream +function returns a pointer to the +.Nm +stream associated with its argument. +.Pp The .Fn fts_close function @@ -853,7 +965,7 @@ functions may fail and set as follows: .Bl -tag -width Er .It Bq Er EINVAL -The options were invalid, or the list were empty. +The options were invalid, or the list was empty. .El .Sh SEE ALSO .Xr find 1 ,