Changelog for findutils: 4.10.0 -> 4.11.0 Source: ChangeLog 2026-07-11 Bernhard Voelker version 4.11.0 * NEWS: Record release date. 2026-07-11 Bernhard Voelker NEWS: attribute an entry with its Savannah bug number * NEWS: Mention #66365. While at it, remove a double-newline before "Future Changes". 2026-07-11 Bernhard Voelker doc: mention check-root tests in maintainer's manual * doc/find-maint.texi (Making Releases): Document the various flavors of testing: check, syntax-check and check-root. 2026-07-11 Bernhard Voelker NEWS: mention translation updates * NEWS (Translations): List the languagues changes since the last release. 2026-07-09 James Youngman NEWS: add a 2024 POSIX change and predict the future of -perm /000. * NEWS (Documentation Changes): "find -iname" is in IEEE Std 1003.1-2024. Improvements to the portability of the man pages to other nroff implementations. (Future Changes): we're going to remove the warning about -perm /000 in a future release. 2026-07-09 Bernhard Voelker doc: propagate recent xargs exit status changes from find.1 to find.texi This merges the changes of recent commit 1c2c1fcc33d from the xargs manpage to the Texinfo manual. * doc/find.texi (Invoking xargs): exit status 123 also covers cases where the command's (normal) exit status was a value greater than 125. Explain that xargs might in the future use other values in the 2-233 range to indicate other failure modes. Improve the hint that xargs uses execvp rather than invoking via the shell. 2026-07-09 James Youngman doc: find(1): point out -{a,c,}newer / -newerXY eqivalence. * find/find.1 (OPTIONS): be more explicit in pointing out equivalences between -newer, -anewer, -xnewer and -newerXY. This is already explicit in the Texinfo documentation. 2026-07-08 James Youngman doc: correct/improve EXIT STATUS section of xargs man page. * xargs/xargs.1 (EXIT STATUS): exit status 123 also covers cases where the command's (normal) exit status was a value greater than 125. Explain that xargs might in the future use other values in the 2-233 range to indicate other failure modes (as the STANDARDS CONFORMANCE section already points out). 2026-07-08 James Youngman doc: improve formatting of xargs man page on narrow terminals. * xargs/xargs.1 (STANDARDS CONFORMANCE): tweak table so that it's readable on narrow terminals. Previously the table would not format legibly on an 80-column terminal. Now, it is legible on a 68-column terminal. 2026-07-08 James Youngman doc: prefer neutral double-quotes in xargs man page. * xargs/xargs.1: instead of a mix of single and double quotes in option examples, use double quotes. However, examples in the text are still quoted using left and right quotes. The distinction in use here is whether the punctuation would need to be pasted into a script (in which case we use \[dq] since it generates plain ASCII output) or whether it simply indicates an example (in which case we use left and right quotation marks). 2026-07-08 Bernhard Voelker maint: avoid check-all-manpages errors 'make check-all-manpages' complains: troff:./xargs.1:155: warning: macro '"' not defined an.tmac:./xargs.1:571: style: blank line in input * xargs/xargs.1: Fix comment start. Eliminate blank line. 2026-07-08 James Youngman xargs: Re-organise STANDARDS CONFORMANCE section of the man page. * xargs/xargs.1 (STANDARDS CONFORMANCE): re-organise. 2026-07-08 James Youngman doc: POSIX 2004 added xargs option -p and removed -e and -i. * xargs/xargs.1: point out that -e and -i were removed from POSIX long ago, in 2004, and that -p was added in the same version of the standard. * doc/find.texi: Likewise. 2026-07-08 James Youngman doc: explain the relationship between xargs exit status and POSIX requirements. * xargs/xargs.1 (STANDARDS CONFORMANCE): add a table showing the requirements of the POSIX standard for xargs exit status, and how the actual behavior of GNU xargs complies with this. 2026-07-08 James Youngman doc: POSIX status of xargs -l, -i, -e unchanged since 2004. * xargs/xargs.1: the existing text described the status as of 2004, we update it to point out that those things are still the case. 2026-07-08 James Youngman doc: POSIX 2024 added xargs option -r. * doc/find.texi: xargs -r is no longer a GNU extension, since POSIX now specifies it (as of 2024). * xargs/xargs.1: Likewise. 2026-07-08 James Youngman doc: POSIX 2004 added xargs option -p and removed -e and -i. * xargs/xargs.1: point out that -e and -i were removed from POSIX long ago, in 2004, and that -p was added in the same version of the standard. * doc/find.texi: Likewise. 2026-07-06 James Youngman doc: xargs does not use the (128+sig) convention of /bin/sh. * doc/find.texi: Point out that xargs does not launch commands via the shell and does not use the "128 + signal" convention used for $? in the shell. * xargs/xargs.1: Likewise. 2026-07-06 James Youngman xargs: remove spurious parentheses in a comment. * xargs/xargs.c: remove spurious parentheses after a variable name. 2026-07-06 James Youngman doc: add release year when mentioning release numbers. * doc/find.texi: add year of release each time we mention a findutils release number. * find/find.1: Likewise. * xargs/xargs.1: Likewise. 2026-06-30 Bernhard Voelker maint: add intermediate *.t2p directories to doc/.gitignore Ignore more Texinfo remains from 'make pdf'. * doc/.gitignore (/find.t2p/): Add entry. (/find-maint.t2p/): Likewise. 2026-06-30 Bernhard Voelker doc: mention the functional change of find -mount * find/find.1 (Functional Changes): Document that -mount is no longer a synonym for -xdev. 2026-06-28 James Youngman find: fix missing space in error message. * find/parser.c (parse_perm): add missing space in error message. I introduced the bug earlier today (in 3f2c9b88e180a762ce43c1be5b0520e09cd2d43d). 2026-06-28 James Youngman locate: "end-of-file" not "end of file" in error message. * locate/word_io.c (getword): "end-of-file" not "end of file". 2026-06-28 James Youngman maint: spaces, not tabs. * find/exec.c: convert tabs to spaces in the source. * find/parser.c: Likewise. * find/util.c: Likewise. * lib/findutils-version.c: Likewise. * xargs/xargs.c: Likewise. 2026-06-28 James Youngman maint: add Bernhard Voelker to authors listed in --version output. This is long overdue. Sorry, Bernhard, and thanks for everything you have done so far. * lib/findutils-version.c (display_findutils_version): Add Bernhard. * THANKS: mention that people should also look at the AUTHORS file. 2026-06-28 James Youngman maint: Add a couple of comments for background info for maintainers. * find/util.c (set_option_defaults): point out that we stopped supporting FIND_BLOCK_SIZE in 2003. * xargs/xargs.c (print_args): point out that we try to issue an error message in a situation where it is unlikely that the user will see it (as the message reports an inability to write to the standard error output). 2026-06-28 James Youngman Update various error messages for better comprehensibility. * find/exec.c (prep_child_for_exec): separate messages for when we do or do not know the name of the directory we wanted to change to. * find/parser.c (launch): when waitpid fails, the error message we issued no longer seems to imply that we were waiting for a file. * find/tree.c (get_expr): when issuing an error message about an failed internal consistency check, state that this is probably a bug so that the problem will not be attributed to user error. (scan_rest): Likewise. (opt_expr): Likewise. (get_new_pred_chk_op): Likewise. * locate/word_io.c (getword): Use "end of file" rather than "EOF" in the error message. 2026-06-28 James Youngman maint: add some "TRANSLATORS:" comments to help translation teams. * find/exec.c: add TRANSLATORS: comments where this might be helpful. * find/fstype.c: Likewise. * find/parser.c: Likewise. * lib/safe-atoi.c: Likewise. * xargs/xargs.c: Likewise. 2026-06-28 James Youngman find: update cwd save/restore error messages for better translation. * find/util.c (record_initial_cwd): use a different error message according to whether or not we know the name of the initial working directory, rather than constructing the English sentence dynamically. This should make the error messages easier to translate. (cleanup_initial_cwd): Likewise. 2026-06-28 James Youngman find: update -perm /000 warning message to say that it will be removed. * find/parser.c (parse_perm): update the warning message for "-perm /000". This used to indicate that there had been a recent change. But the change was in 2007, so update the message to say that in some future release, a warning will no longer be issued. 2026-06-28 James Youngman maint: fix bug in sc_tests_executable for VPATH builds. * cfg.mk (sc_tests_executable): "git ls-files ../foo/tests" fails when the current directory is not below a directory which has a .git subdirectory. But this is often the case for VPATH builds (i.e. builds run outside the source tree). Avoid the problem by temporarily changing working directory, as we do in other syntax checks. 2026-06-28 James Youngman maint: fix some lint-style complaints from "make syntax-check". * locate/word_io.c: include gnulib headers with not "foo.h". * find/ftsfind.c: convert tabs to spaces. Winnie was right, of course. 2026-06-28 James Youngman Fix some spelling errors in documentation. * doc/find.texi: fix a spelling error. * find/find.1: fix two spelling errors. 2026-06-28 James Youngman Clarify error when -files0-from and -ok both read the same file. The problem (that the existing error message was unclear) was reported by the Translation Project. This is the second of the two unclear error messages. * find/ftsfind.c (process_all_startpoints): clarify error message. * tests/find/files0-from.sh: update tests to expect the updated error message. Factor out some of the regex matching logic so that test failure messages are more explicit about the nature of the problem. 2026-06-27 James Youngman Clarify error message when -files0-from and -ok both want to read stdin. The problem (that the existing error message was unclear) was reported by the Translation Project. * find/ftsfind.c (process_all_startpoints): clarify error message. * tests/find/files0-from.sh: update tests to expect the updated error message. 2026-06-27 James Youngman Emphasize the warnings about constructs like `-size -1M`. * find/find.1 (-size): add "IMPORTANT:" to the warning about constructs like `-size -1M`. * doc/find.texi (Size): emphasize the same warning by using a cartouche. 2026-06-27 James Youngman Revert "maint: prefer endian.h for byte order conversions", fixing #68482. This fixes https://savannah.gnu.org/bugs/index.php?68482 and reverts commit 744da6ddcc80b91abe06a6e9823a537cde26a27e. * bootstrap.conf (gnulib_modules): remove endian. * locate/word_io.c (decode_value): unconditionally swap bytes to produce the `swapped` value. 2026-06-27 James Youngman More substantial documentation of -xdev and -mount. * doc/find.texi (Filesystems): explain the difference between -xdev and -mount. Add an example. * find/find.1 (EXAMPLES): add some -xdev and -mount examples. 2026-06-27 James Youngman find: fix minor roff style issues in manual page. * find/find.1 (-execdir): fix typo in troff directive (.BS should be .BR). Also eliminate blank lines. 2026-06-27 James Youngman Fix small error in description of -name in the find manual page. * find/find.1 (-name): correct small error in which "-" was used where "/" was presumably meant. This fixes https://savannah.gnu.org/bugs/index.php?67707. 2026-06-27 James Youngman tests/misc/help-version.sh: don't prepend source dirs to $PATH. * tests/misc/help-version.sh: remove unnecessary call to fu_path_prepend_. The changes needed to ensure the relevant binaries are on the PATH were already made in $(TESTS_ENVIRONMENT). This should prevent https://savannah.gnu.org/bugs/?68480. 2026-06-27 James Youngman find: Don't suggest -print0 when the output is for a human. * find/find.1 (OPTIONS): Suggest -print0 if the output is going to another program, as opposed to suggesting it is suitable for general use. 2026-06-27 James Youngman doc: Format examples & warnings for -files0-from using Texinfo. * doc/find.texi (Option -files0-from file): use @example for the example and cartouche to highlight the itemised list of caveats. 2026-06-27 James Youngman find: "-perm +a+x" is no longer accepted even with POSIXLY_CORRECT unset. * find/find.1 (STANDARDS CONFORMANCE): Unsetting POSIXLY_CORRECT no longer causes find to accept -perm +a+x. 2026-06-27 James Youngman find: Improve consistency between the find manpage and the Texinfo doc. * doc/find.texi (Debug Options): Document the exec and search debug options. (Combining Primaries With Operators): point out that the -not, -and, and -or operators are not in POSIX. Point out that "find afile bfile -name afile -o -name bfile -print" will never print afile. (File Mode Bits): Explain that users should avoid the now-removed -perm +mode usage to prevent confusion, using wording that is more consistent between the two documents. (File System Traversal Options): more explicit wording about files named on the command line. (Symbolic Links): Likewise. (Error Messages From find): remove some error messages which were only issued by `oldfind`, which has already been deleted. (Test -name pattern): mention that -name / matches the root directory. (Name Directives): Point out that %f yields "/" for the root directory and that %h yields an empty string for directories whose name contains a slash. State that %f yields "/" for the root directory. (Location Directives): State that %y yields "U" for files of unknown type. (Going back to -exec): give release year of the first findutils release which supported -exec ... {} +. * find/find.1 (ERRORS): New section, containing similar text to the `Error Messages From find' section of the Texinfo document. (OPERATORS): Slightly clarify the explanation of "find ... -name afile -o -name bfile -print". (-printf %A): explain the length and precision of seconds fields. (-execdir command... {} +): explicitly point out that failed commands would affect find's eventual exit status. (CAVEATS): new section, describing possible future changes. 2026-06-27 James Youngman maint: Lint manpages with CHECKSTYLE=3 (up from 2). * build-aux/man-lint.sh (check_manpages_with_groff_checkstyle_2): change CHECKSTYLE to 3. Rename this function to simply check_manpages_with_groff_checkstyle. 2026-06-27 James Youngman maint: Add a convenience target for checking manual pages. * configure.ac: New recursive target, check-all-manpages, for convenience in lint-checking manual pages. * find/Makefile.am: Add new target check-all-manpages-local. This checks the manpages only. This is faster than invoking "make check" so it is convenient when working with manual page updates. * locate/Makefile.am: Likewise. * xargs/Makefile.am: Likewise. * po/Rules-findutils-no-ops: add dummy rules for the new recursive and local targets. These need to succeed, but Automake does not add these rules in po/ as it doesn't manage the Makefile there. 2026-06-25 James Youngman Even with --enable-compiler-warnings, leave -Wuseless-cast disabled. While these warnings are sometimes helpful, there are cases where it's difficult to tell that the cast is never needed on any platform. * configure.ac (--enable-compiler-warnings): disable -Wuseless-cast. 2026-06-24 James Youngman maint: update gnulib * gnulib: Update to a recent (2026-06-19) version. This version is new enough that it contains many improvements, but still a few days old (meaning that there will have been time to notice any problems with recent commits). There have been there have been 529 commits on gnulib since the last update. 2026-06-24 James Youngman Ignore editor backup files in po/... * po/.gitignore: ignore *~ 2026-04-28 Bernhard Voelker updatedb: properly quote variables and avoid redundant eval * locate/updatedb.sh (checkbinary): Remove 'eval' before echo which serves no purpose here, but instead open an attack surface if the given binary contains dangerously crafted content. Add proper quotes in the caller loop as well. * NEWS: Mention the fix. Reported by Michał Majchrowicz . 2026-04-26 Bernhard Voelker find: work around -used issue on OpenBSD The C library function difftime(3) had a bug on OpenBSD 7.8 until a very recent commit [1] which made 'find -used' behave wrong when atime==ctime. [1] https://github.com/openbsd/src/commit/b018fffbd6c97a Avoid difftime(3) at all because most callers (-acnewer,-cnewer, and most modes of -newerXY) only need the result of the <,=,> comparison instead of the exact time difference. * find/pred.c (ts_difference): Remove. (compare_ts): Remove, and replace by gnulib timespec_cmp in all callers: pred_timewindow, pred_anewer, pred_cnewer, pred_newer, pred_newerXY, pred_used. (pred_timewindow): Use gnulib timespec_sub to calculate DELTA, and use timespec_cmp to determine whether DELTA is greater than 0 and smaller-equal than the given WINDOW. * bootstrap.conf (gnulib_modules): Add timespec-sub. * NEWS: Mention the fix. Fixes https://sv.gnu.org/bugs/?68264 2026-04-26 Bernhard Voelker tests: try to use GNU date and stat for tests/find/used.sh Other implementations like those on OpenBSD are lacking the options needed by this test, and therefore the test would be skipped. * tests/find/used.sh: Try to find GNU-like date(1) and stat(1) tools, falling back to 'gdate' and 'gstat', and use them. 2026-03-19 Bernhard Voelker NEWS: add entry for recent -regex alignment with Emacs * NEWS (Changes in find): Document that 'find -regex' now supports character classes (since gnulib commit efd5c380ff). 2026-02-23 Bernhard Voelker xargs: make errno handling after execvp failure more robust * xargs/xargs.c (xargs_do_exec): Save errno in a new variable to avoid that write() or close() clobber it before its value is used in error(). 2026-02-23 Bernhard Voelker xargs: improve error diagnostic when execvp fails * xargs/xargs.c (xargs_do_exec): Use translation string to diagnose that running the command via execpv failed, and quote the given command appropriately. * NEWS (Improvements): Mention the change. Reported by David Marceau. 2026-01-25 Bernhard Voelker maint: update gnulib to latest Run 'make update-gnulib-to-latest'; there have been 58 commits on gnulib since the last update. * gnulib: Update to latest. 2026-01-25 Bernhard Voelker maint: simplify updating 'bootstrap' and adjust target 'gnulib-sync' Copy the 'bootstrap' script from the 'build-aux' directory in gnulib instead of from the 'top' directory. The former one already contains the 'bootstrap-funclib.sh' code which can then be removed as well here. Finally, remove the obsolete 'autogen.sh' and 'autopull.sh' scripts. * autogen.sh: Remove. * autopull.sh: Remove. * bootstrap-funclib.sh: Remove. * bootstrap: Update from 'gnulib/build-aux/bootstrap'. * Makefile.am (gnulib-sync): Change the source dirsctory of 'bootstrap' from 'top' to 'build-aux', and remove the copying of above obsolete files. 2026-01-20 Bernhard Voelker maint: prefer NULL to nullptr NULL is best for C as discussed - for coreutils - at: https://bugs.gnu.org/66221#53 * bootstrap.conf: Remove dependency on nullptr. * s/nullptr/NULL/. This effectively reverts 93ce19f0d5a1. 2026-01-06 Bernhard Voelker tests: avoid unportable 'sed -i' The sed(1) implementations at least on Solaris and the BSD familiy OSes do not support the -i flag, and latest POSIX 2024 still does not specify it. * tests/find/user-group-max.sh: Avoid 'sed -i' by redirecting to another file ERR2. 2026-01-06 Bernhard Voelker tests: make new -mount test more robust This test failed on non-Linux systems: - On Solaris 11, the output of the native df(1) tool has a different order, and hence the detection of a usable mount point for the test fails. Verify that df(1) is from GNU coreutils, or fall back to 'gdf', else skip the test. - On a FreeBSD system where /home was a symlink to /usr/home, the code for finding a usable mount point failed, because the symlink itself is on the '/' file system. Ensure that the found mount point is identical to the original test directory like /home etc. * tests/find/mount-vs-xdev.sh: Try harder to use a GNU df(1) tool. Check whether the found mount point is identical to the original directory name, thus avoiding symlinks. 2026-01-05 Bernhard Voelker doc: avoid man-lint errors due to deprecated .HP macro The .HP macro introduced only recently triggers a 'make check' errors: env GROFF=groff ../build-aux/man-lint.sh . find.1 check_manpages_format_without_error_messages ( find.1): OK check_manpages_with_groff_checkstyle_2 ( find.1): FAILED an.tmac:./find.1:23: style: use of deprecated macro: .HP make[3]: *** [Makefile:3112: findutils-check-manpages] Error 1 and env GROFF=groff ../build-aux/man-lint.sh . locate.1 updatedb.1 locatedb.5 check_manpages_format_without_error_messages ( locate.1): OK check_manpages_format_without_error_messages ( updatedb.1): OK check_manpages_format_without_error_messages ( locatedb.5): OK check_manpages_with_groff_checkstyle_2 ( locate.1): FAILED an.tmac:./locate.1:18: style: use of deprecated macro: .HP make[3]: *** [Makefile:3287: findutils-check-manpages] Error 1 make[3]: Target 'check-local' not remade because of errors. The HP hanging paragraph would work nicely, but is marked as deprecated in groff-1.23; the deprecations warning will disappear in groff-1.24. Until then, use .TP instead to avoid the check errors. * find/find.1: Change '.HP' to the '.TP' tagged paragraph macro. Add a FIXME for 2027 to switch to .HP when groff-1.24 is more commonly available. * locate/locate.1: Likewise. 2026-01-05 G. Branden Robinson (tiny change) xargs.1: revise option formatting * xargs/xargs.1: - Migrate from comma-separated to "stacked tag" formatting for command options. This is easier to read and understand when option syntax is complex, and eliminates the problem of the comma being misinterpreted. Setting the comma in bold, not roman, might have increased this risk. Stacking tags--without direct recourse to formatter requests--however requires the use of a groff man(7) extension macro, `TQ` (from groff 1.20, 2009). Because this page needs to be portable to non-groff formatters, define a page-local version after testing for its nonexistence using other GNU troff extensions (the `do` request and the `d` conditional expression operator). (Actually, the method here is to test for `TQ`'s existence and then ignore the macro definition if the test succeeds; the token `..` terminates whichever eventuates.) - Use the `TQ` macro to stack paragraph tags presenting synonymous options to xargs(1). - Use the page-local `~~` string to put unbreakable spaces (where supported) between short options and their arguments. (On the other hand, if a paragraph tag breaks across lines, the document likely requires revision.) Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) xargs.1: fix markup nit * xargs/xargs.1: Consistently use empty request before paragraphing macros to aid document maintainers. This was already done, inconsistently. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) xargs.1: fix markup nit groff_man(7): History M. Douglas McIlroy ⟨m.douglas.mcilroy@dartmouth.edu⟩ designed, implemented, and documented the AT&T man macros for Unix Version 7 (1979) and employed them to edit Volume 1 of its Programmer’s Manual, a compilation of all man pages supplied by the system. The package supported the macros listed in this page not described as extensions, except P and the deprecated AT and UC. It documented no registers and defined only R and S strings. UC appeared in 3BSD (1980). Unix System III (1980) introduced P and exposed the registers IN and LL, which had been internal to Seventh Edition Unix man. PWB/Unix 2.0 (1980) added the Tm string. 4BSD (1980) added lq and rq strings. SunOS 2.0 (1985) recognized C, D, P, and X registers. 4.3BSD (1986) added AT and P. Ninth Edition Unix (1986) introduced EX and EE. SunOS 4.0 (1988) added SB. Unix System V (1988) incorporated BSD’s lq and rq strings. Except for EX/EE, James Clark implemented the foregoing features in early versions of groff. Later, groff 1.20 (2009) resurrected EX/EE and originated SY/YS, TQ, MT/ME, and UR/UE. Plan 9 from User Space’s troff introduced MR in 2020. * xargs/xargs.1: Favor `P` macro, which the page predominantly uses, over `PP` (`LP` is not observed). `P` has been universally portable since 1986. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) xargs.1: fix markup nit * xargs/xargs.1: Drop unnecessary quotes around single-word macro arguments. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) xargs.1: fix unescaped hyphens * xargs/xargs.1: Do the above. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) xargs.1: clarify --max-args value "1" better * xargs/xargs.1: Do the above. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) xargs.1: hyphenate attributive phrase * xargs/xargs.1 (OPTIONS): Use hyphen in "POSIX-compliant". Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) xargs.1: fix font markup nit * xargs/xargs.1: Favor man(7) font macros over *roff font selection escape sequences. Macros are (a) visually less cluttered, (b) interfere less with spell checking, and (c), in groff man(7), automatically apply italic corrections, which otherwise requires explicit use of GNU troff extension escape sequences (`\/` and `\,`). Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) xargs.1: use ellipses in synopsis ...rather than pluralization. * xargs/xargs.1 (SYNOPSIS): Do the above. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) xargs.1: set file names in italics ...not roman. groff_man_style(7): Font style macros ... .I [text] Set text in an italic or oblique face. Given no argument, I plants a one‐line input trap; text on the next line, which can be further formatted with a macro, is set in an italic or oblique face. Use italics for file and path names, for environment variables, for C data types, for enumeration or preprocessor constants in C, for variant (user‐replaceable) portions of syntax synopses, for the first occurrence (only) of a technical concept being introduced, for names of journals and of literary works longer than an article, and anywhere a parameter requiring replacement by the user is encountered. An exception involves variant text in a context already typeset in italics, such as file or path names with replaceable components; in such cases, follow the convention of mathematical typography: set the file or path name in italics as usual but use roman for the variant part (see IR and RI below), and italics again in running roman text when referring to the variant material. * xargs/xargs.1: Do the above. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) xargs.1: use quotation marks * xargs/xargs.1: Also set the braces in `-I{}` in bold, not roman, since they are literal. The `lq` and `rq` strings are widely portable. groff_man_style(7): Strings \*(lq \*(rq interpolate special character escape sequences for left and right double‐quotation marks, \(lq and \(rq, respectively. ... A contemporary man page needs none of the above. \*S is superfluous; type size changes are invisible on terminals, and macros that change it restore its original value afterward. Better alternatives exist for the rest; simply use the \[rg], \[lq], \[rq], and \[tm] special character escape sequences directly. Unless you are aiming for a pathological level of portability—— perhaps composing a man page for consumption on simulators of 1980s Unix systems (or Solaris 10 troff, though even it supports “\(rg”)——avoid using the above strings. ... Notes Some tips on composing and troubleshooting your man pages follow. ... • When and how should I use quotation marks? As noted above in subsection “Font style macros”, apply quotation marks to “brief specimens of literal text, such as article titles, inline examples, mentions of individual characters or short strings, and (sub)section headings in man pages”. Multi‐ word literals, such as Unix commands with arguments, when set inline (as opposed to displayed between EX and EE), should be quoted to ensure that the boundaries of the literal are clear even when the material is stripped of font styling by, for example, copy‐and‐paste operations. groff, Heirloom Doctools troff, neatroff, and mandoc support all of the special characters \[oq], \[cq], \[lq], \[rq], \[aq], and \[dq] described in subsection “Portability” above. DWB, Plan 9, and Solaris 10 troffs do not. Interpolating the strings \*(lq and \*(rq portably yields directional double quotation marks, if available, in all these formatters (though neatroff does not supply a man macro package), but they cannot reliably be used in macro arguments. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) xargs.1: set "findutils" in italics ...not roman. * xargs/xargs.1 (STANDARDS CONFORMANCE): Do the above. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) xargs.1: fix truncated examples on old troff Seventh Edition Unix man(7)[1] and its descendants handle at most six arguments to macros. Excess arguments are ignored and not formatted. [1] https://minnie.tuhs.org/cgi-bin/utree.pl?file=V7/usr/lib/tmac/tmac.an * xargs/xargs.1 (EXAMPLES): Add quotes. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) xargs.1: add styling to text ...for consistency with existing practice in findutils man pages. * xargs/xargs.1: Set "find" (the command) and "-print0" in bold, not roman. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) xargs.1: access ' character portably * xargs/xargs.1: Do the above. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) xargs.1: overcome limited portability of \~ Warnings from `groff -C -ww -man` in the forthcoming groff 1.24: troff:xargs/xargs.1:295: warning: an escaped '~' is not portable to AT&T troff troff:xargs/xargs.1:296: warning: an escaped '~' is not portable to AT&T troff troff:xargs/xargs.1:296: warning: an escaped '~' is not portable to AT&T troff troff:xargs/xargs.1:298: warning: an escaped '~' is not portable to AT&T troff groff_man_style(1): Portability ... \~ Adjustable non‐breaking space. Use this escape sequence to prevent a break inside a short phrase or between a numerical quantity and its corresponding unit(s). Before starting the motor, set the output speed to\~1. There are 1,024\~bytes in 1\~KiB. CSTR\~#8 documents the B\~language. \~ is a GNU extension also supported by Heirloom Doctools troff 050915 (September 2005), mandoc 1.9.14 (2009‐11‐16), neatroff (commit 1c6ab0f6e, 2016‐09‐13), and Plan 9 from User Space troff (commit 93f8143600, 2022‐08‐12), but not by DWB or Solaris 10 troffs. * xargs/xargs.1: Define a string to indirect use of `\~` escape sequence. On formatters that don't support groff extensions, use the AT&T troff `\ ` (backslash-space) escape sequence, which isn't quite as good because it is a space that is not only unbreakable, but unadjustable--which, however, doesn't matter when formatting man pages with adjustment disabled, as some implementations do (and which groff makes configurable). Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) locate.1: access ^ character portably The `\(ha` special character escape sequence is not universally portable. Indirect it through a string definition. (GNU Bash also uses this technique.[1]) * locate/locate.1: Do the above. [1] https://github.com/bminor/bash/blob/a8a1c2fac029404d3f42cd39f5a20f24b6e4fe4b/doc/bash.1#L26 Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) locatedb.5: fix unescaped hyphens These instances represent hyphen-minus characters, so should be spelled in man(7) source as `\-`. * locate/locatedb.5: Do the above. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) xargs.1: use portable typographer's quotes * xargs/xargs.1: Do the above. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) find.1: set file name literals in italics ...not roman, and protect them from hyphenation. GNU troff, Heirloom Doctools troff, and mandoc all support use of the `\%` hyphenation control escape sequence at the _beginning_ of a word suppress its hyphenation. Other troffs do not. Indirect this application of the escape sequence through a string, interpolating nothing on formatters that don't advertise GNU compatibility via the `.g` register. (This means that literals can hyphenate undesirably on DWB, Solaris, and Plan 9 troffs.) GNU troff, Heirloom Doctools troff, and mandoc all also support the GNU `\:` extension to mark break points that should not produce hyphens. Apply the same technique to avoid undesired formatting of a ':' character on DWB, Solaris, and Plan 9 troffs. * find/find.1: Do the above. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) find.1: access “ and ” portably The `\(lq` and `\(rq` and special character escape sequences are not universally portable. Traditionally, AT&T troff did not bother to identify these special characters at all; it was apparently felt that adjacently setting directional single quotes sufficed. You can discern this fact in materials typeset by AT&T troff by observing what one might call generous kerning of these glyphs when used as "double" quotes. However, someone at the Berkeley CSRG had a brainwave, and for 4BSD in 1980, added strings named `lq` and `rq` to the man(7) package so that man pages could access double quotes by whatever means the underlying implementation had for realizing them. This excellent idea made it into Unix System V (1988/9), so that every surviving troff implementation known to me, including DWB and Solaris 10, supports them--save one. The exception is Plan 9. Fortunately, the Plan 9 from User Space ("plan9port") project accepted a patch from me on 10 October to add support there as well.[1] Like the \*" string, \*(lq and \*(rq should not be used in quoted macro arguments if one desires portability to AT&T troff-descended formatters (other than Heirloom Doctools troff); if the implementation defines these strings such that their interpolations contain `"`, undesired output is the likely result. [1] https://github.com/9fans/plan9port/pull/735 * find/find.1: Do the above. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) find.1: use new ~ string for pastable tilde * find/find.1: Do the above. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) find.1: access ~ character portably * find/find.1: The `\(ti` special character escape sequence is not universally portable. Indirect it through a string definition. (GNU Bash also uses this technique.[1]) [1] https://github.com/bminor/bash/blob/a8a1c2fac029404d3f42cd39f5a20f24b6e4fe4b/doc/bash.1#L26 Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) find.1: improve cosmetics of *roff logic * find/find.1: Do the above. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) doc: access en dash character portably The `\(en` special character escape sequence is not universally portable. Indirect it through a string definition. * find/find.1: * locate/locate.1: * locate/locatedb.5: * locate/updatedb.1: * xargs/xargs.1: Do the above. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) find.1: use em dash for linguistic pausa An em dash is the more orthographically correct dash for a couple of contexts where the page had been using an en dash (which denotes a range), and its special character escape sequence is universally portable to boot. * find/find.1: \Replace "(en" by "\(em". Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) find.1: set quotation marks as such in roman * find/find.1: ...not bold. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) find.1: access ` character portably When using ` as the Unix shell's command output substitution operator, use the portable *roff `\(ga` special character escape sequence to ensure that we really format a grave accent rather than a typographer's single quotation mark (‘). * find/find.1: Do the above. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) find.1: access ' character portably The `\(aq` special character escape sequence is not universally portable. Indirect it through a string definition. (GNU Bash also uses this technique.[1]) [1] https://github.com/bminor/bash/blob/a8a1c2fac029404d3f42cd39f5a20f24b6e4fe4b/doc/bash.1#L26 * find/find.1: Do the above. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) find.1: access " character somewhat portably The `\(dq` special character escape sequence is not universally portable. Indirect it through a string definition. (GNU Bash also uses this technique.[1]) Unfortunately, `"` is one of the worst-behaved and least-accessible characters in AT&T troff; a pleasant Dr. Jekyll when used on text lines, its Mr. Hyde persona erupts when used in macro calls, and is wholly unpredictable to non-experts when appearing in request arguments.[2] _Some_ AT&T troffs offer `\(dq` on _some_ output devices. AT&T troff also has no mechanism for a document to define its own special character escape sequences. GNU troff offers `\(dq` on all output devices. [1] https://github.com/bminor/bash/blob/a8a1c2fac029404d3f42cd39f5a20f24b6e4fe4b/doc/bash.1#L26 [2] "For the (neutral) double quote, you have recourse to an obscure syntactical feature of AT&T troff. Because a double quote can begin a macro argument, the formatter keeps track of whether the current argument was started thus, and doesn’t require a space after the double quote that ends it. In the argument list to a macro, a double quote that isn’t preceded by a space doesn’t start a macro argument. If not preceded by a double quote that began an argument, this double quote becomes part of the argument. Furthermore, within a quoted argument, a pair of adjacent double quotes becomes a literal double quote." https://www.gnu.org/software/groff/manual/groff.html.node/Calling-Macros.html * find/find.1: Do the above. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) find.1: improve table formatting * find/find.1: - Use paragraphing macros to put vertical space above and below the tables (where not already present) so that they looks more like typographical "displays".[1] - Simplify "XY" table definition (see groff's tbl(1) man page). This simpler definition has the same result (and is more adaptable in the event the text of the table is revised). - Put horizontal rule below column headings in table that uses them. - Use thin space escape sequences `\|` between the dots of an ellipsis; the effect is visible only on typesetting devices.[2] I left the dummy character escape sequence `\&` trailing it intact, but observe for the edification of nit-pickers that it has no effect in this context.[3] [1] man(7) implementations are historically inconsistent with respect to whether a `TS` macro call should put any vertical space on the output, and compositional practices on the part of man page authors have thus been, to quote Ingo Schwarze, "wildly inconsistent". https://savannah.gnu.org/bugs/?62841 [2] groff_man_style(7): Examples of ellipsis usage are shown above, in subsection “Synopsis macros”. The idiomatic roff ellipsis is three dots (periods) with thin space escape sequences \| internally separating them. [3] tbl(1): Ordinarily, a table entry is typeset rigidly. It is not filled, broken, hyphenated, adjusted, or populated with supplemental inter‐ sentence space. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) find.1: quote multi-word `SH`, `SS` call arguments The man(7) macro package from AT&T troff and most of its descendants, including those in DWB, Plan 9, and Solaris troffs, support at most six arguments to any macro call. * find/find.1: Quote all multi-word arguments to these macros, not just those in excess of six arguments, as a reminder of defensive practice to document maintainers. Before and after on Plan 9 from User Space troff: $ diff -b -U0 find-plan9port-[12].txt --- find-plan9port-1.txt 2025-11-18 20:20:08.388887375 -0600 +++ find-plan9port-2.txt 2025-11-18 20:20:14.712881949 -0600 @@ -2068 +2068 @@ - Safer `find -print0 | xargs -0` + Safer `find -print0 | xargs -0` approach @@ -2129 +2129,2 @@ - Traversing the filesystem just once en + Traversing the filesystem just once en for 2 different actions Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) locate.1: improve table formatting * locate/locate.1 (HISTORY): - Use paragraphing macro to put vertical space above the table so that it looks more like a typographical "display".[1] - Set table cells that overset the line on AT&T nroff (where the line length is 65n) using text blocks. - Issue `na` request in these text blocks to prevent the cell contents from adjusting in the event the formatter/package/user has configured man pages to employ adjustment by default. (Practices vary; it's a long story.[2]) - Remove spaces around the configured tbl(1) tab character of `|`. This certainly does make the table uglier in source form. Unfortunately, AT&T tbl(1) takes those spaces deadly seriously and they impact the computed cell (and therefore column) widths. GNU tbl has for decades supported a "nospaces" region option to address precisely this problem; unfortunately it is not portable to DWB 3.3, Plan 9, or Solaris 10 troffs, and I suspect not to _any_ surviving System V troff. Fixes warning from tbl(1) in groff 1.23.0: locate/locate.1:289: warning: table wider than line length minus indentation [1] man(7) implementations are historically inconsistent with respect to whether a `TS` macro call should put any vertical space on the output, and compositional practices on the part of man page authors have thus been, to quote Ingo Schwarze, "wildly inconsistent". https://savannah.gnu.org/bugs/?62841 [2] "Some people do hate adjustment of nroff output, though, which is why I added a feature to groff man(7) to support disabling it. The history of this practice is inconsistent. Seventh Edition Unix (1979) disabled adjustment of man pages when rendering in nroff mode,[3] and BSD retained that disablement until death. SunOS commented it as early as SunOS 2.0 (1985), thus restoring adjustment in nroff mode, and retained that all the way through Solaris 10 (2005). When James Clark wrote groff starting in about 1989, his man(7) implementation closely emulated SunOS. With the Solaris 11 release in 2010, Oracle discarded its AT&T-descended troff in favor of the then-current groff release. [That's not quite true--see below.] They're still on groff 1.22.2 (2013) today, and so they've been adjusting their man pages in nroff mode for at least 40 years, as has groff for about 35[]. I don't know what other System V Unices did." https://lists.gnu.org/archive/html/groff/2025-05/msg00001.html (I made an incorrect claim in the foregoing; Solaris 11 still has its AT&T troff around, but its man page rendering is now performed by [an old version of] groff.) Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) doc: improve formatting of command synopses (2/2) * find/find.1: * locate/locate.1: Use unbreakable spaces between options and their arguments, potentially improving legibility. The existing synopses are short enough that they don't break in such a way as to promote confusion even on old-fashioned AT&T troffs that use a line length of 65n in nroff mode (vs. groff man(7)'s historical 78n and present-day 80n). Thus this change merely makes the synopses robust to future changes. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) doc: improve formatting of command synopses (1/2) * find/find.1: * locate/locate.1: Use `HP` hanging paragraph macro to indent non-initial lines of synopsis. Temporarily disable adjustment. An alternative approach would be to use groff man(7)'s `SY` and `YS` extension macros; each man page would then need to define local versions for portability to DWB 3.3, Plan 9, and Solaris 10 troffs. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) doc: improve typography of synopses * find/find.1: * locate/locate.1: Place thin space escape sequences between ellipsis dots for more pleasant output when typesetting. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) doc: use man(7) macros to style command synopses * find/find.1: * locate/locate.1: * locate/updatedb.1: * xargs/xargs.1: Favor man(7) font alternation macros over *roff font escape sequences. When typesetting with groff(1), the macros automatically apply italic corrections. * locate/locate.1: Protect long option name literals from hyphenation. GNU troff, Heirloom Doctools troff, and mandoc all support use of the `\%` hyphenation control escape sequence at the _beginning_ of a word suppress its hyphenation. Other troffs do not. Indirect this application of the escape sequence through a string, interpolating nothing on formatters that don't advertise GNU compatibility via the `.g` register. (This means that literals can hyphenate undesirably on DWB, Solaris, and Plan 9 troffs.) Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) find.1: use AT&T troff-compatible syntax Before and after, using DWB 3.3 troff (Plan 9 and Solaris 10 troffs are similar): $ diff -U0 find.1.dwb-[12].txt|head -n 19 --- find.1.dwb-1.txt 2025-10-13 10:09:17.024054824 -0500 +++ find.1.dwb-2.txt 2025-10-13 10:09:24.764012282 -0500 @@ -2039 +2039 @@ - [bu] + o Find files named core in or below the directory /tmp and @@ -2054 +2053,0 @@ - Find files named core in or below the directory /tmp and @@ -2064,2 +2063 @@ - [bu] - Find files named core in or below the directory /tmp and + o Find files named core in or below the directory /tmp and @@ -2080,2 +2078 @@ - [bu] - Given that another program proggy pre-filters and cre- + o Given that another program proggy pre-filters and cre- @@ -2097,2 +2094 @@ - [bu] - Run file on every file in or below the current direc- + o Run file on every file in or below the current direc- Further changes in the diff appear because the document now paginates differently with these troffs. That's because a one-en-wide mark 'o' (the ASCII representation of a bullet) fits within the 4n space allotted by the document's `IP` calls, whereas "[bu]" does not. Fixes warnings from "nroff -C -ww -man" in the forthcoming groff 1.24: troff:./find/find.1:2260: warning: an escaped '[' is not portable to AT&T troff troff:./find/find.1:2277: warning: an escaped '[' is not portable to AT&T troff troff:./find/find.1:2305: warning: an escaped '[' is not portable to AT&T troff troff:./find/find.1:2326: warning: an escaped '[' is not portable to AT&T troff troff:./find/find.1:2349: warning: an escaped '[' is not portable to AT&T troff troff:./find/find.1:2372: warning: an escaped '[' is not portable to AT&T troff troff:./find/find.1:2392: warning: an escaped '[' is not portable to AT&T troff troff:./find/find.1:2402: warning: an escaped '[' is not portable to AT&T troff troff:./find/find.1:2415: warning: an escaped '[' is not portable to AT&T troff troff:./find/find.1:2431: warning: an escaped '[' is not portable to AT&T troff troff:./find/find.1:2442: warning: an escaped '[' is not portable to AT&T troff troff:./find/find.1:2459: warning: an escaped '[' is not portable to AT&T troff troff:./find/find.1:2471: warning: an escaped '[' is not portable to AT&T troff troff:./find/find.1:2498: warning: an escaped '[' is not portable to AT&T troff troff:./find/find.1:2542: warning: an escaped '[' is not portable to AT&T troff troff:./find/find.1:2597: warning: an escaped '[' is not portable to AT&T troff troff:./find/find.1:2618: warning: an escaped '[' is not portable to AT&T troff troff:./find/find.1:2630: warning: an escaped '[' is not portable to AT&T troff * find/find.1: Replace '\[bu]' by '\(bu'. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-05 G. Branden Robinson (tiny change) doc: delete blank lines from man page sources * find/find.1: * xargs/xargs.1: Replace blank lines with empty requests or paragraphing macro calls as seems to be intended. * find/find.1: Delete blank lines preceding paragraphing or sectioning macros that serve only to put excess vertical space in the output. * locate/locatedb.5: Replace blank lines with a dummy character producing a blank output line as _might_ be intended. groff_man_style(7): ? The empty request (.), which does nothing, vertically spaces the input file for readability by the document maintainer. Do not put blank (empty) lines in a man page source document. Some man(1) programs ?squeeze? multiple blank output lines into one. Fixes style warnings from `groff -rCHECKSTYLE=3 -man`: an.tmac:/.../share/man/man1/find.1:87: style: blank line in input ... an.tmac:/.../share/man/man1/xargs.1:231: style: blank line in input ... an.tmac:/.../share/man/man5/locatedb.5:118: style: blank line in input ... Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-02 G. Branden Robinson (tiny change) find.1: fix typo in *roff syntax Style warning from `groff -rCHECKSTYLE=3 -man`: an.tmac:/.../share/man/man1/find.1:9: style: 1 leading space(s) on input line * find/find.1 (SYNOPSIS): Make an intended empty request work that way. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-02 G. Branden Robinson (tiny change) doc: populate man pages' headers and footers more Style warnings from `groff -rCHECKSTYLE=3 -man`. an.tmac:/.../share/man/man1/locate.1:1: style: .TH missing third argument; \ consider document modification date in ISO 8601 format (YYYY-MM-DD) an.tmac:/.../share/man/man1/locate.1:1: style: .TH missing fourth argument; \ consider package/project name and version (e.g., "groff 1.23.0") ...and similar. groff_man_style(7): .TH identifier section [footer‐middle [footer‐inside [header‐ middle]]] ... By convention, footer‐middle is the date of the most recent modification to the man page source document, and footer‐ inside is the name and version or release of the project providing it. * find/find.1: * locate/locate.1: * locate/locatedb.5: * locate/updatedb.1: * xargs/xargs.1: Add appropriate third and fourth arguments to `TH` macro calls. To determine the revision date to include in the page, I used the Git "AuthorDate" of the last commit consituting anything but a "bump" to the copyright notice. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-02 G. Branden Robinson (tiny change) find.1: drop unportable tbl(1) 'x' modifier Plan 9 and Solaris tbl, like Seventh Edition Unix tbl, do not support the 'x' column modifier. This extension appeared in DWB tbl by version 3.3 and early in GNU troff development (both circa 1990). I suspect, but do not know, that other System V Unix tbl programs don't support it either. These old tbl programs are brutal when they encounter an unsupported column modifier--they abort the preprocessor altogether ("tbl quits") without attempting recovery.[1] Because tbl works as a filter, like eqn, pic, soelim, or more familiar Unix tools (cat, sed, nl), this means that tbl truncated the entire remainder of the input at that point. GNU tbl is more robust, and discards input only until the next `.TE` token. Due to this rudeness it's impossible to portably use 'x' without rewriting the page text, and I know of no good way to parameterize a table format. (tbl(1) doesn't have variables or anything like a macro preprocessor. *roff strings are no use because tbl is a _pre_processor for troff.) To portably use 'x' requires a man page to test the underlying implementation and potentially rewrite the page prior to installing it. See a recent patch of mine to ncurses (merged in its 20251115 release) for an approach potentially adaptable to findutils. https://lists.gnu.org/archive/html/bug-ncurses/2025-11/msg00035.html [1] I've proposed a merge request to Plan 9 from User Space to make its tbl less intolerant. Even if accepted, that won't help anyone who uses other "legacy" troffs. https://github.com/9fans/plan9port/pull/739 * find/find.1 (Functional Changes): Drop 'x' table modifier. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-11/msg00094.html 2026-01-02 Bernhard Voelker find: add more -mount tests (check-root) Add some more tests exercising bind mounts on the same device which should not be affected by -mount or -xdev, and tests with a loopback file system and a bind mount from there. * tests/find/mount-vs-xdev-bind.sh: Add test. * tests/find/mount-vs-xdev-other-fs.sh: Likewise. * tests/local.mk (all_root_tests): Reference them. 2026-01-02 Bernhard Voelker find: add -mount tests * tests/find/mount-vs-xdev.sh: Add test. * tests/local.mk (sh_tests): Reference it. 2026-01-02 Bernhard Voelker NEWS: enhance description about the -mount change * NEWS (Changes in find): Clarify better what is the difference between the -mount and -xdev options including an example. Also move the topic to the top of the section due to its importance. 2026-01-02 Lukáš Zaoral find: make -mount POSIX 2024 compliant * find/defs.h (struct options): Add mount member and rename stay_on_filesystem to xdev. * find/ftsfind.c (find): Set FTS_MOUNT flag when -mount is enabled. * find/parser.c (parse_table): Use a separate parser for -mount. (parse_mount): Declare and define function. (parse_xdev): Use xdev option flag. * find/util.c (set_option_defaults): Initialize new struct members. * doc/find.texi (node Filesystems): Add new section describing the new behaviour of -mount and specify the current behaviour of -xdev. * find/find.1: Document the new -mount behaviour and specify current behaviour of -xdev. * NEWS (Changes in find): Mention the -mount behaviour change. 2026-01-02 Bernhard Voelker maint: update copyright year number ranges Run 'make update-copyright'. * lib/regexprops.c (copying): Update the year number manually. * tests/sample-test: Adjust to use the single most recent year. * All other files: Update copyright years via the above make run. 2026-01-02 Bernhard Voelker maint: update gnulib to latest Run 'make update-gnulib-to-latest'; there have been 135 commits on gnulib since the last update. This is mainly for the following change making sc_copyright_check pass again, but there are also other useful fixes and improvements: > maint: run 'make update-copyright' * gnulib: Update to latest. * autogen.sh: Likewise. * autopull.sh: Likewise. * bootstrap: Likewise. * bootstrap-funclib.sh: Likewise. 2025-11-18 James Youngman [find] Format findutils changes as reverse-time-ordered tables. * find/find.1 (COMPATIBILITY): Add release-year information to the feature addition table. Format the functional changes as a table, too. 2025-11-17 James Youngman [maint] Stricter manpage checks. From a suggestion by G. Branden Robinson to use `groff -t -z -ww -rCHECKSTYLE=2 -man`, by pointing to and example in https://lists.gnu.org/archive/html/bug-findutils/2025-11/msg00004.html. * configure.ac: discover the location of the groff binary. * build-aux/man-lint.sh: also run groff with -rCHECKSTYLE=2. Use groff at the path discovered during configuration. * find/Makefile.am: Lint-check manpages during "make check", not "make dist". Set the environment variable GROFF to the location of the groff binary. * locate/Makefile.am: Likewise. * xargs/Makefile.am: Likewise. 2025-11-17 James Youngman [find] Fix a lint problem in the find manual page. Without this fix, we get this error from `groff -C -t -z -ww -rCHECKSTYLE=2 -man find/find.1`: troff: find/find.1:2255: warning: macro '."' not defined troff: find/find.1:2255: warning: number register '[' not defined * find/find.1: revert a change which caused a lint warning from troff. 2025-11-17 James Youngman [find] Use ASCII apostrophe in find.1 (instead of U+2019). * find/find.1: Use ASCII apostrophe U+0027 instead of U+2019. 2025-11-15 Bernhard Voelker maint: switch from gnulib ctype to ctype-h module Prompted by the following bootstrap notice: Notice from module ctype: This module is deprecated. Use the module 'ctype-h' instead. * bootstrap.conf (gnulib_modules): ctype -> ctype-h 2025-11-15 Bernhard Voelker maint: update gnulib to latest Run 'make update-gnulib-to-latest'; there have been 450 commits on gnulib since the last update. This pulls in the new FTS_MOUNT flag needed for the upcoming changes to -mount vs. -xdev mandated by POSIX Issue 8 (IEEE Std 1003.1-2024), thanks to Lukáš Zaoral : > fts: Introduce the FTS_MOUNT flag. * gnulib: Update to latest. * bootstrap-funclib.sh: Likewise. 2025-11-15 Bernhard Voelker parser.c: simplify parse_table Avoid macro preprocessing when filling the parse_table for better readability. * find/parser.c (PASTE, PARSE_OPTION, PARSE_POSOPT, PARSE_TEST, PARSE_TEST_NP, PARSE_ACTION, PARSE_PUNCTUATION): Remove macros. (parse_table): Replace macro-based filling with regular structure entries. Group entries by types: regular options, positional options, punctuation, tests and actions; loosely sort within each group. Remove duplicate "atime" entry introduced in commit 7102a229fa. While at it, change -help and -version from ARG_TEST to ARG_OPTION. 2025-11-15 Bernhard Voelker maint: help translators to disambiguate -0 as --null, not option "o" As reported in , it is easy to confuse -0 with -O. Give a hint to translators. * xargs/xargs.c (main): Add TRANSLATORS hints. 2025-11-15 Bernhard Voelker maint: add entry to .gitignore file * po/.gitignore (/insert-header.sed): Add. 2025-11-15 Bernhard Voelker maint: prefer C23-style nullptr * bootstrap.conf (gnulib_modules): Add nullptr. In code, prefer nullptr to NULL where either will do. * cfg.mk (sc_prohibit_NULL): Direct to use nullptr instead. (begword, endword): Add regex helper macros. 2025-11-15 Bernhard Voelker maint: do not produce DVI-format manual anymore The GNU standards don't require DVI-format documentation anymore: https://lists.gnu.org/archive/html/bug-standards/2025-07/msg00011.html * build-aux/update-online-manual.sh: Remove DVI format. * doc/.gitignore: Remove ignore entries for DVI files. 2025-11-15 Bernhard Voelker maint: use consistent references to standard files in messages Use standard input instead of stdin, standard output instead of stdout, and standard error instead of stderr in messages and documentation. Inspired by coreutils commit: https://cgit.git.sv.gnu.org/cgit/coreutils.git/commit/?id=c9a30d6781 * cfg.mk (sc_standard_outputs): Add syntax-check rule. * doc/find.texi: Do the above. * find/find.1: Likewise. * locate/locate.1: Likewise. * locate/locate.c: Likewise. * xargs/xargs.1: Likewise. * xargs/xargs.c: Likewise. 2025-11-15 Bernhard Voelker doc: clarify that POSIX Issue 8 is "IEEE Std 1003.1-2024" * doc/find.texi: Do the above in various places. * find/find.1: Likewise. * xargs/xargs.1: Likewise. 2025-11-15 Bernhard Voelker doc: state that POSIX from Issue 8 specifies 'find -iname' * doc/find.texi (-iname): Document POSIX compliance. * find/find.1 (COMPATIBILITY): Mark POSIX compliance of -iname. 2025-11-15 Collin Funk maint: ensure that new "make syntax-check"-run sc_codespell passes * cfg.mk (codespell_ignore_words_list): Ignore false-positives. (exclude_file_name_regexp--sc_codespell): Skip some file names. * NEWS: Fix typos. * README-hacking: Likewise. * doc/find-maint.texi: Likewise. * doc/find.texi: Likewise. * bootstrap.conf: Fix typos in comments. * find/ftsfind.c: Likewise. * find/parser.c: Likewise. * find/print.c: Likewise. * find/testsuite/find.gnu/exec-one-rtn-fail.exp: Likewise. * find/testsuite/find.posix/bracket-depth.exp: Likewise. * find/testsuite/find.posix/exec-nogaps.exp: Likewise. * find/testsuite/find.posix/files-not-expressions1.exp: Likewise. * find/testsuite/find.posix/files-not-expressions2.exp: Likewise. * find/testsuite/find.posix/files-not-expressions3.exp: Likewise. * find/util.c: Likewise. * init.cfg: Likewise. * lib/regextype.h: Likewise. * lib/splitstring.h: Likewise. * locate/locate.c: Likewise. * locate/updatedb.sh: Likewise. * tests/find/exec-plus-last-file.sh: Likewise. * tests/find/files0-from.sh: Likewise. * tests/xargs/test-sigusr.c: Likewise. * tests/xargs/verbose-quote.sh: Likewise. * xargs/xargs.c: Likewise. 2025-10-15 James Youngman doc: minor shell coding improvements in examples. - Use -type f so that the timestamp of `subdir` is not relevant. - Use LC_ALL=C with sort, tail, cut (as file names are not text). - Use "$(...)" instead of just $(...). Also mention that Issue 8 of the POSIX standard has been published now. 2025-10-15 James Youngman find: point out that -newer is false when timestamps are equal. 2025-10-13 Bernhard Voelker find: document -newerXY in --help output * find/util.c (usage): Add above find(1) option, and briefly explain that XY stands for the combination [aBcm][aBcmt]. 2025-10-13 Bernhard Voelker find: fix minor typo in --help output * find/util.c (usage): Terminate sentence about -D with a dot. (show_valid_debug_options): While at it, add indentation for -D values. 2025-08-24 danny mcClanahan (tiny change) doc: fix typo in symbolics links node * doc/find.texi (node Symbolic Links): s/directoires/directories/ * find/testsuite/find.gnu/execdir-hier.exp: Likewise here in a comment. 2025-07-09 Bernhard Voelker doc: regenerate regexprops.texi * doc/regexprops.texi: Regenerate due to recent changes in gnulib regex.h to align with current Emacs behavior (gnulib commit efd5c380ff), and also due to the change of the node sort order in regextype.c in the previous commit. Reported by Collin Funk in https://lists.gnu.org/r/bug-gnulib/2025-07/msg00037.html 2025-07-09 Bernhard Voelker regexprops: sort regex_map alphabetically Commit '1b53838ddf' has changed the order of the nodes, yet not quite well. Let's use alphabetical sort order. * lib/regextype.c (regex_map): Move 'awk' and 'egrep' entries up. 2025-07-09 Bernhard Voelker maint: update gnulib to latest Run 'make update-gnulib-to-latest'; there have been 645 commits on gnulib since the last update. * gnulib: Update to latest. * bootstrap: Likewise. * bootstrap-funclib.sh: Likewise. 2025-07-01 Bernhard Voelker doc: reference -newer for -anewer,-cnewer in find.1 * find/find.1 (-anewer): Reference the similarity to -newer. (-cnewer): Likewise. Discussed at: https://sv.gnu.org/bugs/?67220 2025-04-18 raf doc: supplement list of actions that suppress default -print * find/find.1 (EXPRESSION): Add missing -print0 and -fprint0 to the list of actions that suppress the default -print action. Sort items. * doc/find.texi (find Expressions): Likewise. * NEWS: Mention the fix. 2025-04-18 Bernhard Voelker NEWS: mention the previous doc fixes * NEWS (Documentation Changes): Describe the fix done by the two previous commits. 2025-04-18 Bernhard Voelker doc: fix the "Finding the Shallowest Instance" example in find.1 * find/find.1 (EXAMPLES): Fix the Pruning SCM example by changing the attribution of the list from "Sample output" to "Sample directories". The wrong attribution was made in commit v4.7.0-76-g9302afb9. Then, add the output for clarity. Fixes https://sv.gnu.org/bugs/?62259 2025-04-18 raf doc: fix the "Finding the Shallowest Instance" example in Texinfo manual * doc/find.texi (Finding the Shallowest Instance): Add surrounding \( and \) around the 3x -exec actions to correctly group them with higher priority than the implicit '-a' for the following '-print'. Otherwise, only the SCM roots matching the last test, "CVS", would be printed. Improve indentation of the multi-line command. Add sample output for clarity. While at it, fix a minor typo. This bug was present since adding that example in 2008. The very same issue was already fixed for the man page in commit v4.6.0-55-g47d8fd38. Fixes https://sv.gnu.org/bugs/?62259 2025-04-06 Bernhard Voelker tests: add case for passing -files0-from multiple times Passing -files0-from several times silently overrides the previously given file names, and only takes the last one. This behavior is quite common and has precedence e.g. in 'du --files0-from ...'. Add a test to document the current behavior. * tests/find/files0-from.sh: Add a test passing -files0-from 3 times. Discussed at: https://sv.gnu.org/bugs/?66965 2025-03-25 Bernhard Voelker NEWS: document the previous fixes in find.1 * NEWS (Documentation Changes): Mention the change of the previous commit. 2025-03-25 Bjarni Ingi Gislason find.1: some remarks and editing fixes in the man page Reported at: https://lists.gnu.org/r/bug-findutils/2025-03/msg00002.html Output from "mandoc -T lint find.1": (shortened list) 1 input text line longer than 80 bytes: Some of the conversi... 1 missing date, using "": TH 1 unterminated quoted argument -.-. Output from "test-nroff -mandoc -t -ww -z find.1": (shortened list) 1 Use macro '.B' for one argument or split argument. 1 Use macro '.I' for one argument or split argument. 1 .BR is for at least 2 arguments, got 1 1 .IR is for at least 2 arguments, got 1 -.-. Change a HYPHEN-MINUS (code 0x2D) to a minus(-dash) (\-), if it is in front of a name for an option, is a symbol for standard input, is a single character used to indicate an option, or is in the NAME section (man-pages(7)). N.B. - (0x2D), processed as a UTF-8 file, is changed to a hyphen (0x2010, groff \[u2010] or \[hy]) in the output. 73:until an expression argument comes (which also starts with a `-'). 74:Now, if a path argument would start with a `-', then 875:An exception to this is when using only a slash as \fIpattern\fR (`-name /'), 878:A warning is issued if you try to pass a pattern containing a - but not 879:consisting solely of one - slash, unless the environment variable 1095:The + and - prefixes signify greater than and less than, as usual; 1832:find / -name needle -print -quit 2252:.SS Safer `find -print0 | xargs -0` approach 2324:.SS Traversing the filesystem just once - for 2 different actions 2473:Pruning - omitting files and subdirectories 2590:.B $ find / -name needle -print -quit 2607:.B $ find . .. / /tmp /tmp/TRACE compile compile/64/tests/find -maxdepth 0 -printf '[%h][%f]\en' 2654:.B find -print0 2656:.B xargs -0 2743:find: possible unquoted pattern after predicate `-name'? -.-. Add a "\&" (or a comma (Oxford comma)) after "e.g." and "i.e.", or use English words (man-pages(7)). Abbreviation points should be marked as such and protected against being interpreted as an end of sentence, if they are not, and that independent of the current place on the line. 546:and e.g. from a pipe. 565:The processing of the starting points is otherwise as usual, e.g. -.-. Wrong distance (not two spaces) between sentences in the input file. Separate the sentences and subordinate clauses; each begins on a new line. See man-pages(7) ("Conventions for source file layout") and "info groff" ("Input Conventions"). The best procedure is to always start a new sentence on a new line, at least, if you are typing on a computer. Remember coding: Only one command ("sentence") on each (logical) line. E-mail: Easier to quote exactly the relevant lines. Generally: Easier to edit the sentence. Patches: Less unaffected text. Search for two adjacent words is easier, when they belong to the same line, and the same phrase. The amount of space between sentences in the output can then be controlled with the ".ss" request. Mark a final abbreviation point as such by suffixing it with "\&". Some sentences (etc.) do not begin on a new line. Split (sometimes) lines after a punctuation mark; before a conjunction. Lines with only one (or two) space(s) between sentences could be split, so latter sentences begin on a new line. Use sed -e '/^\./n' \ -e 's/\([[:alpha:]]\)\. */\1.\n/g' $1 to split lines after a sentence period. Check result with the difference between the formatted outputs. See also the attachment "general.bugs" [List of affected lines removed.] -.-. Split lines longer than 80 characters into two or more lines. Appropriate break points are the end of a sentence and a subordinate clause; after punctuation marks. Add "\:" to split the string for the output, "\" in the source. Line 1546, length 86 Some of the conversion specification characters might not be available on all systems, Line 2487, length 82 .B $ find . \-name .snapshot \-prune \-o \e( \e! \-name \(aq*~\(aq \-print0 \e) \e Line 2607, length 96 .B $ find . .. / /tmp /tmp/TRACE compile compile/64/tests/find -maxdepth 0 -printf '[%h][%f]\en' Line 2645, length 87 .I A Research UNIX Reader: Annotated Excerpts from the Programmer’s Manual, 1971-1986 -.-. Use \(en (en-dash) for a dash at the beginning (end) of a line, or between space characters, not a minus (\-) or a hyphen (-), except in the NAME section. find.1:2324:.SS Traversing the filesystem just once - for 2 different actions find.1:2473:Pruning - omitting files and subdirectories -.-. Remove reverse slash (\) in front of a period (.) that is to be printed as such, and can not come a control character in the first column of a line. Use "\&" to protect the period to avoid that. This is a sign, that the man page was transformed from another source file with a program, whose name is NOT mentioned in a comment. 2715:\.B \-perm +MODE 2717:\.B \-perm -.-. Split a punctuation mark from a single argument for a two-font macro 1048:.IR ./fubar3, -.-. Put a parenthetical sentence, phrase on a separate line, if not part of a code. See man-pages(7), item "semantic newline". [List of affected lines removed.] -.-. One space only after an end of sentence. find.1:339:no error message will be issued. This is the reason why such operation find.1:546:and e.g. from a pipe. find.1:960:find . \-path \(dq./sr*sc\(dq find.1:1797:find . \-path ./src/emacs \-prune \-o \-print find.1:1896:.B find . \-name afile \-o \-name bfile \-print find.1:2309:.B $ find . \-type f \-exec file \(aq{}\(aq \e; find.1:2384:.B $ find . \-perm 664 find.1:2399:.B $ find . \-perm \-664 find.1:2413:.B $ find . \-perm /222 find.1:2423:.B $ find . \-perm /220 find.1:2424:.B $ find . \-perm /u+w,g+w find.1:2425:.B $ find . \-perm /u=w,g=w find.1:2440:.B $ find . \-perm \-220 find.1:2441:.B $ find . \-perm \-g+w,u+w find.1:2452:.B $ find . \-perm \-444 \-perm /222 \e! \-perm /111 find.1:2453:.B $ find . \-perm \-a+r \-perm /a+w \e! \-perm /a+x find.1:2467:.RB ( "! \-perm /111" find.1:2469:.B ! \-perm /a+x find.1:2487:.B $ find . \-name .snapshot \-prune \-o \e( \e! \-name \(aq*~\(aq \-print0 \e) \e find.1:2607:.B $ find . .. / /tmp /tmp/TRACE compile compile/64/tests/find -maxdepth 0 -printf '[%h][%f]\en' find.1:2727:.B find . \-name afile \-o \-name bfile \-print find.1:2731:.BR "find . \-name afile \-o \e( \-name bfile \-a \-print \e)" . find.1:2741:.B $ find . \-name *.c \-print find.1:2754:.B find . \-name frcode.c locate.c word_io.c \-print find.1:2766:.B $ find . \-name \(aq*.c\(aq \-print find.1:2767:.B $ find . \-name \e*.c \-print -.-. Put a subordinate sentence (after a comma) on a new line. [List of affected lines removed.] -.-. Remove quotes when there is a printable but no space character between them and the quotes are not for emphasis (markup), for example as an argument to a macro. find.1:638:.IP "\-noleaf" find.1:1154:.IP "\-writable" find.1:1196:.IP "\-delete\fR" find.1:1802:.IP "\-quit" find.1:2233:.SH "EXAMPLES" find.1:2638:.SH "HISTORY" find.1:2659:.SH "COMPATIBILITY" find.1:2724:.SH "NON-BUGS" find.1:2770:.SH "BUGS" -.-. Section headings (.SH and .SS) do not need quoting their arguments. 1968:.SH "STANDARDS CONFORMANCE" 2120:.SH "ENVIRONMENT VARIABLES" 2233:.SH "EXAMPLES" 2638:.SH "HISTORY" 2659:.SH "COMPATIBILITY" 2724:.SH "NON-BUGS" 2770:.SH "BUGS" 2788:.SH "REPORTING BUGS" 2811:.SH "SEE ALSO" -.-. Space after an end of sentence. temp.table:25:\-exec ... + 4.2.12 POSIX -.-. Output from "test-groff -mandoc -t -K utf8 -rF0 -rHY=0 -rCHECKSTYLE=10 -ww -z ": an.tmac::2: style: .TH missing third argument; consider document modification date in ISO 8601 format (YYYY-MM-DD) an.tmac::2: style: .TH missing fourth argument; consider package/project name and version (e.g., "groff 1.23.0") an.tmac::690: misuse, warning: .BR is for at least 2 arguments, got 1 Use macro '.B' for one argument or split argument. an.tmac::1048: misuse, warning: .IR is for at least 2 arguments, got 1 Use macro '.I' for one argument or split argument. -.-. Additionally: Change "1\ KB" to "1\ KiB" Change indent "4m" to "4n". "4m" is too wide in troff-mode. Inhibit hyphenation of "strftime" once (based on an A4 page size). Create a "space" between some tags and the its following text by adding " \&" to the tag. Decrease indent after a bullet in lists. Generally: Split (sometimes) lines after a punctuation mark; before a conjunction. * find/find.1: Change as described above. 2025-03-25 Bernhard Voelker maint: remove declared-only find_pred_name Only user was inside a an #ifdef DEBUG / #endif block. Introduced with -context in commit v4.5.5-42-g1a05af6a. * find/parser.c (parse_context): Remove #ifdef/#endif block. * find/defs.h (find_pred_name): Remove declaration. 2025-03-23 Bernhard Voelker find: issue a warning for wrongly accepted operators like '-!' In the current implementation, GNU find accepts the operators '!', ',', '(' and ')' with a leading dash, e.g. '-!'. Let's issue a warning to see if anyone relies on that odd behavior. With a later release, let's fix the parser, and not accept these anymore. * find/parser.c (find_parser): Issue a warning in the case one of the above operators has been passed with a leading '-'. * tests/find/operators-wrong-with-dash.sh: Add test. * tests/local.mk (sh_tests): Reference it. * NEWS (Changes in find): Mention the change in behavior. Discussed at: https://lists.gnu.org/r/bug-findutils/2025-03/msg00005.html 2025-01-26 Collin Funk tests: adjust shell syntax that breaks AIX /bin/sh * find/testsuite/find.gnu/execdir-multiple.exp: Move the 'do' of a for loop to the same line so AIX doesn't fail. 2025-01-26 Bernhard Voelker find: avoid crash when diagnosing a file system loop When gnulib's FTS returns FTS_DC indicating a directory cycle, then the struct member 'fts_cycle' is not guaranteed to contain valid data. Avoid dereferencing it when diagnosing the file system loop. * find/ftsfind.c (issue_loop_warning): Change the error message to avoid mentioning the other entry involved in the loop anymore. (partial_quotearg_n): Remove now-unused function. * NEWS (Bug Fixes): Mention the fix. Reported by Dietmar Hahn in 2025-01-06 Bernhard Voelker pred.c: consolidate numerical comparisons Several predicate tests perform a numerical comparison based on the comparison_type (COMP_GT, COMP_LT, COMP_EQ). Factor that out into a utility function. * find/pred.c (compare_num): Add static function. (pred_gid, pred_inum, pred_links, pred_size, pred_uid): Use it. 2025-01-05 Bernhard Voelker xargs: clarify command as optional in --help output * xargs/xargs.c (usage): Fix synopsis by wrapping COMMAND in '[...]', because it is in fact optional. Also add a sentence that the default COMMAND is 'echo'. 2025-01-05 Bernhard Voelker doc: mention default command of xargs in 'Invoking xargs' * doc/find.texi (node Invoking xargs): Add sentence about default command 'echo'. Reported by in https://savannah.gnu.org/bugs/?66591 2025-01-05 Bernhard Voelker maint: silence GCC-14 on utility source getlimits.c Seen on GCC 14: getlimits.c:73:3: warning: stack-based buffer overflow [CWE-121] \ [-Wanalyzer-out-of-bounds] 73 | sprintf (limit + 1, "%" "ju", (uintmax_t) TYPE##_MAX); \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ... while limit is defined more than large enough. * find/getlimits.c: Add pragma for GCC version >= 14. 2025-01-04 Bernhard Voelker maint: adjust to gnulib module renaming Since previous gnulib update, './bootstrap' shows deprecation warnings like the following for several modules: Notice from module errno: This module is deprecated. Use the module 'errno-h' instead. Use the newer names instead: - errno -> errno-h - inttypes -> inttypes-h - locale -> locale-h - math -> math-h - realloc-gnu -> realloc-posix - stdarg -> stdarg-h - stdbool -> bool - stddef -> stddef-h - stdint -> stdint-h - stdio -> stdio-h - stdlib -> stdlib-h - string -> string-h - sys_stat -> sys_stat-h - sys_time -> sys_time-h - sys_types -> sys_types-h - sys_wait -> sys_wait-h - wchar -> wchar-h * bootstrap.conf (gnulib_modules): Do the above replacements. 2025-01-04 Bernhard Voelker xargs: simplify error handling for gnulib's safe_read function The gnulib/NEWS file states: SAFE_READ_ERROR and SAFE_WRITE_ERROR are now obsolescent; callers can just check for < 0. * xargs/xargs.c (xargs_do_exec): Adjust error handling of safe_read accordingly. 2025-01-04 Bernhard Voelker maint: update gnulib to latest Run 'make update-gnulib-to-latest'; there have been 1127 commits on gnulib since the last update. * gnulib: Update to latest. * bootstrap: Likewise. * bootstrap-funclib.sh: Likewise. * cfg.mk (exclude_file_name_regexp--sc_fsf_postal): Add to exempt the script build-aux/src-sniff.py from this syntax-check. 2025-01-04 Bernhard Voelker maint: update copyright year number ranges Run 'make update-copyright'. * lib/regexprops.c (copying): Update the year number manually. * tests/sample-test: Adjust to use the single most recent year. * All other files: Update copyright years via the above make run. 2024-12-24 Christoph Anton Mitterer (tiny change) doc: state that -execdir prepends the base names with "./" The '{}' replacement done by the -execdir action prepends each entry, i.e., the base names, with "./" unless for the root directory "/". * doc/find.texi (-execdir): Document that behavior. * find/find.1: Likewise. Discussed at: https://sv.gnu.org/bugs/?66568 2024-12-24 Bernhard Voelker doc: maint: break lines at sentences in a paragraph to change As the texinfo renderer is caring about proper layout, we can let sentences start at the beginning of the line, thus making further changes easier to review. * doc/find.texi (-execdir): Break lines at the end of sentences. 2024-12-24 Bernhard Voelker maint: fix typo in comment * find/exec.c (impl_pred_exec): Add '-' to 'execdir' example in comment. 2024-12-23 Bernhard Voelker maint: pull in gnulib module basename-lgpl * bootstrap.conf (gnulib_modules): Add 'basename-lgpl', because we're using the gnulib 'base_name' function. 2024-12-23 Bernhard Voelker find: ignore more vanished subdirectories with -ignore_readdir_race Similar to commit 889d001ab750 which handles vanished files better, also fix the race for subdirectories (FTS_DNR). Reproducer: In average, the following produced 6-10 failures out of 1000 runs: $ mkdir testdir $ while :; do mkdir testdir/foo; rmdir testdir/foo; done & $ for f in $(seq 1000); do \ find testdir -ignore_readdir_race -ls ; done >/dev/null find: 'testdir/foo': No such file or directory find: 'testdir/foo': No such file or directory * find/ftsfind.c (consider_visiting): Return when FTS returned ENOENT for FTS_DNR, i.e., unreadable directory, with -ignore_readdir_race. * tests/find/readdir_race.sh: Add test. * tests/local.mk (sh_tests): Reference it. * NEWS (Bug Fixes): Amend and improve description of the previous fix. See also https://savannah.gnu.org/bugs/?45930 2024-12-02 Bernhard Voelker maint: update further Makefile variables used by Gnulib Like in the recent commit, also change the following variables to follow the renaming done in gnulib: - LIB_SETLOCALE_NULL -> SETLOCALE_NULL_LIB, - LIB_MBRTOWC -> MBRTOWC_LIB, - LIB_EACCESS -> EUIDACCESS_LIBGEN. * find/Makefile.am (LDADD): Change as described above. * lib/Makefile.am: Likewise. * locate/Makefile.am: Likewise. * xargs/Makefile.am: Likewise. 2024-12-02 Collin Funk maint: update Makefile variables used by Gnulib * locate/Makefile.am (LDADD): Remove $(LIB_CLOSE) as it is no longer required per Gnulib NEWS 2009-03-20. * xargs/Makefile.am (LADD): Likewise. * find/Makefile.am (LDADD): Likewise. Change $(LIB_EACCESS) to $(EUIDACCESS_LIBGEN) per Gnulib NEWS 2023-01-07. 2024-12-02 Collin Funk maint: don't use gettimeofday POSIX marked gettimeofday obsolete in POSIX.1-2017 and removed it in POSIX.1-2024. Prefer Gnulib functions which use nanosecond resolution if supported by the operating system. * bootstrap.conf (gnulib_extra_files): Remove gettimeofday. Add gettime. * find/util.c (now): Remove function. (set_option_defaults): Use current_timespec. * find/Makefile.am (LDADD): Rename $(LIB_CLOCK_GETTIME) to $(CLOCK_TIME_LIB) per Gnulib NEWS 2023-01-07. 2024-11-10 Bernhard Voelker doc: fix typo in Texinfo manual * doc/find.texi (node Leaf Optimisation): s/filssytems/filesystems/ Bug introduced in v4.5.10-9-gb28cc8c4 in 2011. Reported by in https://savannah.gnu.org/bugs/?66418 2024-11-03 Bernhard Voelker maint: remove unused include from fstype.c With newer gnulib, the sc_prohibit_always_true_header_tests check fails with: find/fstype.c:30:#if HAVE_MNTENT_H maint.mk: do not test the above HAVE_
_H symbol(s); with the corresponding gnulib module, they are always true make: *** [maint.mk:969: sc_prohibit_always_true_header_tests] Error 1 * find/fstype.c (#include ): Remove as it is not actually used. 2024-11-03 Bernhard Voelker maint: prefer endian.h for byte order conversions Now that is a part of POSIX 2024 it should become more portable than . * bootstrap.conf (gnulib_modules): Remove byteswap; add endian. * locate/word_io.c: Include endian.h instead of byteswap.h. (decode_value): Use htobe32 instead of bswap_32. 2024-11-03 Bernhard Voelker maint: import tests/init.sh from Gnulib during bootstrap * bootstrap.conf (bootstrap_post_import_hook): Use gnulib-tool --copy-file to import tests/init.sh. * tests/init.sh: Remove file. * tests/.gitignore (/init.sh): Add entry. * Makefile.am (update-gnulib-to-latest): Remove handling tests/init.sh. 2024-11-03 Bernhard Voelker maint: list Gnulib sys_types directly * bootstrap.conf (gnulib_modules): Add sys_types. Although it’s already brought in indirectly, findutils code includes directly. 2024-11-03 Bernhard Voelker maint: add NEWS entry for recent 'find -execdir/-okdir' change * NEWS (Changes in find): Reflect the change in behavir in recent commit v4.10.0-15-g1dcdf3de. 2024-11-03 Bernhard Voelker maint: fix indentation in NEWS * NEWS: Use 2 char indentation. 2024-11-03 Bernhard Voelker maint: make tests/sample-test executable To avoid that new tests copied from the template sample-test lack the executable bit, add the executable bit to that file. * tests/sample-test: Set executable permission bit. 2024-11-03 Bernhard Voelker maint: make new tests/find/sv-bug-66365-exec.sh executable 'make syntax-check' fails with: tests_executable maint.mk: Please make test executable: tests/find/sv-bug-66365-exec.sh make: *** [cfg.mk:129: sc_tests_executable] Error 1 * tests/find/sv-bug-66365-exec.sh: Set executable permission bit. 2024-11-02 James Youngman find: -exec is terminated by + only if the prior arg is exactly '{}' A "+" only terminates -exec when it immediately follows an argument which is exactly "{}" (and not, for example, "{}x"). This fixes Savannah bug 66365. * NEWS: explain this change. * doc/find.texi: update one place which omitted the '{}' before '+'. * find/parser.c (insert_exec_ok): consider + to be special ony if it follows an argument which is exactly '{}'. * tests/find/sv-bug-66365-exec.sh: test for this bug. * tests/local.mk: add the new test file. 2024-10-31 James Youngman Fix VPATH compilation failure for 'make check' The libgnulib.a library isn't (necessarily) below $(top_srcdir), it's below $(top_builddir). This fixes a bug introduced in commit 85fc8966e5912390ad220d03b188dd319c85ed1e. 2024-09-17 Bernhard Voelker tests: avoid -Wshadow warning Seen on GCC 14.2.0: tests/xargs/test-sigusr.c: In function 'run_xargs': tests/xargs/test-sigusr.c:159:43: warning: declaration of 'optarg' \ shadows a global declaration [-Wshadow] 159 | run_xargs(const char *option, const char *optarg, int send_signal) | ~~~~~~~~~~~~^~~~~~ ... /usr/include/bits/getopt_core.h:36:14: note: shadowed declaration is here 36 | extern char *optarg; | ^~~~~~ * tests/xargs/test-sigusr.c (run_xargs): Rename 'optarg' parameter to 'opt_arg'. 2024-09-17 Bernhard Voelker maint: avoid using FSF postal address The postal address of the FSF has changed from Franklin Street to Milk Street in Boston, yet according to RMS we shall better avoid the postal address. * build-aux/update-online-manual.sh (Copyright): Change from postal address to the FSF URL. 2024-09-17 Bernhard Voelker maint: adjust to Gnulib -Wsystem-headers change * configure.ac: Don’t suppress -Wsystem-headers since Gnulib no longer enables it. Borrowed from https://git.sv.gnu.org/cgit/coreutils.git/commit/?id=94e8f2b012eb 2024-09-17 Bernhard Voelker maint: pacify GCC 14.2 Avoid the following warnings: tree.c:1573:19: warning: no previous declaration for 'cost_table' [-Wmissing-variable-declarations] 1573 | struct cost_assoc cost_table[] = | ^~~~~~~~~~ findutils-version.c:37:13: warning: no previous declaration for 'version_string' [-Wmissing-variable-declarations] 37 | const char *version_string = VERSION; | ^~~~~~~~~~~~~~ * find/tree.c (cost_table): Declare static. * lib/findutils-version.c (version_string): Likewise. * locate/frcode.c (version_string): Remove extern declaration. * locate/locate.c: Likewise. * xargs/xargs.c: Likewise. 2024-09-17 Bernhard Voelker find: ignore more vanished entries with -ignore_readdir_race Reproducer: # Spin up lots of short-living processes. $ while env true; do sleep .001; done & # Invoke 'find' on the /proc file system; # this pretty reliably gives the following error: $ find /proc -ignore_readdir_race -maxdepth 3 > /dev/null find: '/proc/845078': No such file or directory * find/ftsfind.c (consider_visiting): Return when FTS returned ENOENT with the option -ignore_readdir_race. * NEWS (Bug Fixes): Mention the fix. Fixes https://savannah.gnu.org/bugs/?45930 2024-09-17 Dave (tiny change) Bernhard Voelker build: add bison as requirement Building from git without bison available would result in cc1: fatal error: ./parse-datetime.c: No such file or directory which is not a very helpful error message. Let gnulib bootstrap check for bison much earlier. * README-hacking (Prerequisites): Add Bison explicitly. * bootstrap.conf (buildreq): Add bison. * cfg.mk (bootstrap-tools): Add gnulib variable with tools including bison. 2024-06-24 Collin Funk (tiny change) tests: link binaries to gnulib * tests/local.mk (AM_CPPFLAGS): Include gnulib headers. (LDADD): Link to gnulib. 2024-06-24 Bernhard Voelker doc: avoid sc_prohibit_unhyphenated_eof failure 'make syntax-check' complains: maint.mk: use "end-of-file", not "end of file" make: *** [cfg.mk:273: sc_prohibit_unhyphenated_eof] Error 1 * doc/find.texi (xargs options): Change as suggested by the SC rule. 2024-06-03 James Youngman doc: State that find -print0 and xargs -0 are in POSIX from Issue 8. The forthcoming Issue 8 of the POSIX standard includes find -print0 and xargs -0. * doc/find.texi: find -print0 is no longer GNU-specific. Similarly for xargs -0. * xargs/xargs.1: Likewise. * NEWS: mention these changes. 2024-06-03 James Youngman find: mention when -print0 was introduced. * find/find.1(COMPATIBILITY): mention that -print0 was introduced in release 2.0 and is planned for inclusion in POSIX Issue 8. 2024-06-01 James Youngman maint: prohibit the use of tabs in Findutils C sources. This check does not apply to gnulib code. * cfg.mk (sc_spaces_not_tabs): add syntax check prohibiting the use of tabs in Findutils code. * build-aux/tabs-to-spaces.sh: Add small tool for converting source file tabs to spaces. 2024-06-01 James Youngman maint: convert tabs to spaces in C source files. 2024-06-01 Bernhard Voelker maint: post-release administrivia * NEWS: Add new dummy release header. 2024-01-01 Bernhard Voelker 2023-05-22 Bernhard Voelker 2023-05-22 Bernhard Voelker 2023-01-01 ribbon (tiny change) 2022-11-15 Antonio Diaz Diaz (tiny change) 2022-11-15 Antonio Diaz Diaz (tiny change) 2022-02-01 Bernhard Voelker 2022-01-30 Andreas Metzler 2021-11-27 Bernhard Voelker 2021-09-19 Bernhard Voelker 2020-10-06 Kamil Dudka 2020-09-16 Bernhard Voelker 2020-09-16 Bernhard Voelker 2020-08-13 Bernhard Voelker 2020-08-13 Bernhard Voelker 2020-08-13 Bernhard Voelker 2020-08-13 Bernhard Voelker 2020-08-13 Bernhard Voelker 2020-08-13 Bernhard Voelker 2020-08-12 Bernhard Voelker 2020-08-12 Bernhard Voelker 2020-08-12 Bernhard Voelker 2019-11-12 Bernhard Voelker 2019-08-29 Bernhard Voelker 2019-01-08 Bernhard Voelker 2019-01-08 Bernhard Voelker 2019-01-08 Bernhard Voelker 2019-01-08 Bernhard Voelker 2019-01-08 Bernhard Voelker 2019-01-08 Bernhard Voelker 2019-01-08 Bernhard Voelker 2019-01-08 Bernhard Voelker 2019-01-08 Bernhard Voelker 2019-01-08 Bernhard Voelker 2019-01-08 Bernhard Voelker 2019-01-08 Bernhard Voelker 2018-07-07 Andreas Metzler 2018-07-07 Bernhard Voelker 2017-11-07 Bernhard Voelker 2017-10-22 Bernhard Voelker 2017-10-22 Bernhard Voelker 2017-10-22 Bernhard Voelker 2017-10-22 Bernhard Voelker 2017-10-22 Bernhard Voelker 2017-10-22 Bernhard Voelker 2017-09-13 Bernhard Voelker 2017-06-08 Andreas Metzler 2017-06-08 Bernhard Voelker 2016-11-02 Bernhard Voelker 2016-01-25 James Youngman 2016-01-25 James Youngman 2016-01-25 James Youngman 2016-01-24 James Youngman 2016-01-03 James Youngman 2016-01-03 James Youngman 2016-01-01 James Youngman 2015-12-30 James Youngman 2015-12-23 James Youngman 2015-12-23 James Youngman 2015-12-23 James Youngman 2015-10-31 James Youngman 2015-10-31 James Youngman 2015-05-12 James Youngman 2015-05-12 Bernhard Voelker 2015-05-12 Phil Miller (tiny change) 2015-05-09 James Youngman 2014-01-14 James Youngman 2014-01-05 Richard Hartmann 2014-01-05 James Youngman