2026-02-04  Pádraig Brady  <P@draigBrady.com>

	version 9.10
	* NEWS: Record release date.

2026-02-02  Pádraig Brady  <P@draigBrady.com>

	maintainer-makefile: propagate MAKEINFO to gendocs
	Make this change temporarily in coreutils.
	Move to gnulib after v9.10 is released.

	* top/maint.mk (web-manual): Propagate MAKEINFO explicitly,
	rather than requiring it exported in the environment,
	which can be awkward on Solaris make for example.

2026-02-02  Pádraig Brady  <P@draigBrady.com>

	tests: avoid false failure sync'ing busy systems
	* tests/misc/sync.sh: Increase the timeout to 60s,
	and restrict the case to when RUN_VERY_EXPENSIVE_TESTS=yes.

2026-01-31  Pádraig Brady  <P@draigBrady.com>

	doc: improve highlighting of dd --help translations
	* src/system.h (oputs_): Ensure we're not matching '-' in
	translated descriptions.  Also support highlighting only
	dd "foo=bar" when the description is separated with a single space.

2026-01-30  Pádraig Brady  <P@draigBrady.com>

	maint: avoid prohibit-const-char syntax check failure
	* src/copy.c: Avoid prohibit-const-char failure,
	newly triggered by the (correct) recent adjustment.

	doc: move xgettext: hint to the correct translated string
	* src/fmt.c (usage): Move comment down to the newly separated string.
	Discussed in https://github.com/coreutils/coreutils/issues/178

2026-01-28  Paul Eggert  <eggert@cs.ucla.edu>

	maint: space between ‘char’ and ‘*’

2026-01-28  Collin Funk  <collin.funk1@gmail.com>

	tests: date: test that %% in the string is not replaced
	* tests/date/percent-percent.sh: New file.
	* tests/local.mk (all_tests): Add it.

2026-01-27  Pádraig Brady  <P@draigBrady.com>

	doc: improve highlighting of single spaced translations
	* src/system.h (oputs_): Translations sometimes use a single space
	between an option and its description.  They only do this though
	for long options since they result in less available screen space.
	Therefore be more strict with option matching once we've encountered
	a long option, which supports the more varied formats often
	associated with short options.

2026-01-27  Collin Funk  <collin.funk1@gmail.com>

	maint: avoid syntax-check failure
	* man/date.x: Add a copyright header to fix sc_copyright_check.
	Reported by Bruno Haible.

	tests: tac: test --regex with anchors in the separator
	* tests/tac/tac.pl (@Tests): Add a few test cases.

2026-01-26  Paul Eggert  <eggert@cs.ucla.edu>

	doc: fit in 80 columns

	doc: fix date(1) synopses etc
	Font problem reported by Michael Aramini via Alejandro Colomar
	<https://bugs.gnu.org/80258>.  This patch also fixes some
	longstanding confusion with date synopses.
	* src/date.c (usage): Do not imply that only -u can be used with
	MMDDhhmm..., and do not put misleading brackets around the latter.

2026-01-25  Collin Funk  <collin.funk1@gmail.com>

	tests: mktemp: export LC_ALL
	* tests/mktemp/bad-unicode.sh: Run this test case using multiple
	locales.

2026-01-25  Pádraig Brady  <P@draigBrady.com>

	doc: support TAB as a delimiter between --option and description
	* src/system.h (oputs_): Treat a single TAB as an option delimiter.
	Some zh translations use this delimiter format.

2026-01-24  Collin Funk  <collin.funk1@gmail.com>

	tests: chgrp: allow a numeric user id to be printed
	* tests/chgrp/from.sh: If 'id' cannot find a user name for user id 1,
	expect the user id to be printed in the message of 'chgrp'.
	Reported by Bruno Haible.

2026-01-24  Pádraig Brady  <P@draigBrady.com>

	tail: fix EINTR handling on older systems
	tail(1) could fail with an "Interrupted system call"
	diagnostic, on some systems like Centos 5 (Linux 2.6.18).
	This was seen with tests/tail/overlay-headers.sh
	which sends SIGCONT, which should not induce a failure.

	* src/tail.c (tail_forever_inotify): Retry the poll()
	upon receiving a non terminating signal, and the syscall
	is not automatically restarted by the system.
	* NEWS: Mention the bug fix.
	Reported by Bruno Haible.

2026-01-24  Collin Funk  <collin.funk1@gmail.com>

	tests: avoid failures if 'ulimit -n' cannot set file descriptor limits
	This fixes test failures seen on Haiku.

	* tests/ls/recursive.sh: Run 'ls' even if ulimit fails.
	* tests/split/r-chunk.sh: Run 'split' even if ulimit fails.
	* tests/sort/sort-merge-fdlimit.sh: Skip test if 'ulimit -n' cannot set
	file descriptor limits.
	Reported by Bruno Haible.

2026-01-24  Pádraig Brady  <P@draigBrady.com>

	tests: dd: avoid EPERM false failure on Solaris
	* tests/dd/fail-ftruncate-fstat.sh: Also map the "Not owner"
	error for EPERM seen on earlier Solaris 11 releases.
	Reported by Bruno Haible.

	doc: nproc: mention OpenMP env vars in --help
	* src/nproc.c (usage): Clarify the impact of 'OMP_NUM_THREADS'
	and 'OMP_THREAD_LIMIT' in --help and the man page.
	Also mention that nproc(1) will always return > 0.
	Fixes https://bugs.gnu.org/80243

	build: update to latest gnulib
	* gnulib:
	  - getdelim, getline: Don't replace these functions on glibc
	  - selinux: fix link errors with termux

2026-01-24  Bruno Haible  <bruno@clisp.org>

	tests: recognize SELinux support on Android
	* init.cfg (require_selinux_): Also try to see if 'mount' lists the
	selinuxfs.

2026-01-24  Pádraig Brady  <P@draigBrady.com>

	tests: stty: avoid false failure if resizing terminal
	* tests/stty/stty-row-col.sh: Skip the test if we detect terminal
	resizing.  Also more robustly restore the original size.

2026-01-24  Collin Funk  <collin.funk1@gmail.com>

	tests: readlink: avoid a false failure on Haiku
	* tests/readlink/readlink-posix.sh: Allow the "A" in "Argument" to be
	capitalized in return value of strerror (EINVAL).

	doc: NEWS: add a missing quotation mark
	* NEWS: Add a closing quotation mark.

2026-01-23  Pádraig Brady  <P@draigBrady.com>

	tests: usage_vs_refs.sh: fix false failure with Alpine
	* tests/misc/usage_vs_refs.sh: Fix missing escape on literal {,
	required by busybox grep.
	Reported by Bruno Haible.

2026-01-22  Egmont Koblinger  <egmont@gmail.com>

	doc: dir,vdir: add dircolors(1) reference to man pages
	* man/dir.x: Add dircolors(1) to "SEE ALSO" section.
	* man/vdir.x: Likewise.

2026-01-22  Pádraig Brady  <P@draigBrady.com>

	doc: dir,vdir: fix anchor refs from --help
	* src/system.h (oputs_): Map from dir,vdir to ls.

2026-01-22  Egmont Koblinger  <egmont@gmail.com>

	doc: stat: fix highlighting of --format
	* src/stat.c (usage): Add missing comma after -c.

2026-01-22  Pádraig Brady  <P@draigBrady.com>

	doc: NEWS: minor adjustments
	* NEWS: Fix typos, and move item to more appropriate section.

	doc: pr: fix --help output output
	* src/pr.c (usage): Use consistent alignment with -J,
	and highlight --pages using oputs().

	doc: help2man: handle leading '+' in options
	* man/help2man: Fix indentation of options with leading '+'.

	tests: fix false failure with pr -COLS
	* tests/misc/usage_vs_getopt.sh: Fix false failure induced
	by commit v9.9-239-ga06f0cf67

2026-01-22  Pádraig Brady  <P@draigBrady.com>

	doc: use TERM=dumb rather than HELP_NO_MARKUP to disable markup
	This is a more standard mechanism to disable markup.

	* src/system.h (oputs_): Logic change to honor TERM=dumb,
	rather than HELP_NO_MARKUP=something.
	* doc/coreutils.texi: Adjust the description for --help.
	* man/local.mk: Ensure TERM is set to something,
	so that man pages have links included.
	* man/viewman: Just honor users $TERM.
	* tests/misc/getopt_vs_usage.sh: Remove env var complication,
	as TERM is unset automatically.
	* tests/misc/usage_vs_refs.sh: Likewise.
	* NEWS: Adjust the change in behavior note.

2026-01-21  Pádraig Brady  <P@draigBrady.com>

	tests: avoid false failure with non standard path
	* tests/misc/usage_vs_refs.sh: Properly quote arguments
	to avoid false failure with paths containing spaces etc.

	tests: avoid infinite loop in dd failure edge case
	* tests/tee/tee.sh: If dd failed, then tee would spin
	writing to the fifo forever, so add a timeout protection.
	This was noticed with `export LD_PRELOAD=libasan.so.8`
	with a non ASAN build, which induced a failure in dd invocations.

	tests: avoid false failure with sanitizer builds
	* init.cfg (sanitizer_build_): Add a helper to detect if a program
	is built against a sanitizer.
	* tests/df/no-mtab-status-masked-proc.sh: Skip if a sanitizer build.

	stat,tail: sync with latest Linux file systems
	* src/stat.c (human_fstype): Add "guest-memfd".
	* NEWS: Mention the improvement.

	tests: avoid false failure on setgid dir
	* tests/misc/mknod.sh: Skip a portion of the test
	in the edge case of setgid directories.

2026-01-21  Pádraig Brady  <P@draigBrady.com>

	ls: --hyperlink: switch to more standard delimiters
	* src/ls.c (quote_name): Use ST (ESC \) rather than BEL,
	as that's the only terminator mentioned in at least
	ECMA-48, DEC STD 070, and EK-VT520-RM.
	* NEWS: Mention the change in behavior.
	* tests/ls/hyperlink.sh: Adjust accordingly.

	Suggested by Egmont Koblinger.

2026-01-21  Pádraig Brady  <P@draigBrady.com>

	tests: ensure there is an anchor for each --help option
	* tests/misc/usage_vs_refs.sh: A new test to correlation options
	listed in --help, and anchors referenced in the texinfo (html) manual.
	* tests/local.mk: Add the new test.

	doc: NEWS: describe the --help markup configuration options
	* NEWS: Mention build and runtime config options.

	doc: adjust --help hyperlinks to more standard format
	* src/system.h (oputs_): Use ST rather than BEL.

	doc: add commentary on details of --help references
	* src/system.h: Mention why we don't bother with (the overhead of)
	hostnames in these URLs, and why --help,--version link are special.

	doc: cp: group related -HLP descriptions
	* src/cp (usage): The -HLP options are close
	in functionality and close alphabetically, so describe together.
	* doc/coreutils.texi (cp invocation): Likewise.

	doc: cp: document --keep-directory-symlink in correct location
	* src/cp.c (usage): Move to alphabetically in list.
	* doc/coreutils.texi (mv invocation): Move description from here ...
	(cp invocation): ... to here.

	doc: ls: document --block-size in the manual
	* doc/coreutils.texi (ls invocation): Document --block-size

	doc: who: document --users in manual
	* doc/coreutils.texi (who invocation): Mention that --users
	is equivalent to -u.
	* src/who.c (usage): Mention -u shows idle time.

	doc: id: document -a in manual
	* doc/coreutils.texi (id invocation): Mention this option is ignored.

	doc: more indexing fixes in manual
	* doc/coreutils.texi: Add missing anchors.
	* src/pr.c (Usage): Adjust to use -COLS, to avoid a clash
	with the additional anchor added to the manual.
	Also markup the --columns option as done for other options.
	* tests/split/line-bytes.sh: Also fix --lines-bytes typo here.

2026-01-21  Egmont Koblinger  <egmont@gmail.com>

	doc: tty: fix indexing in texinfo
	* doc/coreutils.texi: Fix recently introduced typo.
	* THANKS.in: Remove as now committed to the repo.

2026-01-21  Pádraig Brady  <P@draigBrady.com>

	doc: make legacy digest utility --help reference cksum nodes
	* src/system.h (oputs_): Map md5sum etc. to cksum urls,
	as we only have cksum anchors in the manual to avoid
	creating anchors for all of the legacy digest utilities.

	doc: tweak tests to avoid false failure with --help
	* tests/df/df-output.sh: Use a more relaxed match.
	* tests/du/inodes.sh: Likewise.

	doc: all: use option highlighting and more standard alignment
	Adjust all utils to:
	  - Have a separate translation per option
	  - Use either oputs() or oprintf(), instead of fputs() or printf().
	  - Use more standard alignment as discussed in previous commits.
	  - Various tweaks to descriptions.

	doc: readlink: improve option ordering in texinfo
	* doc/coreutils.texi (readlink invocation): Order -q,-s alphabetically.

	doc: chcon: use more standard -HLP desciptions
	* src/chcon.c (usage): Use emit_symlink_recurse_options ("-P").

	doc: highlight -HLP options
	* src/system.h (emit_symlink_recurse_options): Highlight -HLP,
	for chmod, chcon etc.

	doc: put --help and --version descriptions on separate line
	* src/system.h: This aligns the output with the option
	description format used in most commands

	doc: ls: put option description on separate line to option
	* src/ls.c (usage): This is less constrained when writing comments,
	and more consistent in output alignment.  There is less delineation
	between options and descripts, but given options are highlighted
	by default now, this is a more appropriate format to use.
	Note consistently showing description on the line following the option,
	avoids any issue with the user needing to visually line up
	the option with a description far to the right.
	Note this format more closely aligns with that used in man pages.

2026-01-21  Pádraig Brady  <P@draigBrady.com>

	doc: viewman: a new helper to quickly view formatted man pages
	Use like: man/viewman ls

	* man/viewman: Generate man page on the fly, and view.

2026-01-21  Pádraig Brady  <P@draigBrady.com>

	doc: help2man: account for undisplayed markup in indenting calculations
	* man/help2man: This is significant with the indented line
	following the dd bs=BYTES "option" at least.

	doc: help2man: convert all hyperlinks, not just ones in --options
	* man/help2man: Make the (--?) part of the match optional.
	Note we still extract the dashes, to support the existing
	option matching logic in help2man.

	doc: help2man: support alternate format OSC hyperlinks
	* man/help2man: The BEL terminator format was already supported.
	Add support for ESC + backslash terminator.  Also split out
	and document the regular expression.

	doc: help2man: convert OSC hyperlinks
	* man/help2man: Convert OSC hyperlinks to roff \X escapes,
	which will be converted back to OSC hyperlinks when
	the man page is displayed on the terminal.
	Note formatting is removed from hyperlinked text by default,
	thus relying on how the terminal highlights hyperlinks,
	but --bold-refs is honored in this case, in which hyperlinked
	text will be marked up as bold, which matches the default
	markup used for non hyperlinked options.

	doc: help2man: recognise option description with smaller indent
	* man/help2man: Allow for a smaller indented option description.
	This smaller indentation is present in timeout --help output,
	so now the line spacing in timeout.1 is more consistent.
	Also having the description on a separate line with
	a smaller indentation, is a more general way to present
	option descriptions (and what the man page formatting uses already).
	We'll be changing many utilities, especially with longer multi-line
	descriptions to this new format.

	doc: help2man: strip ANSI codes
	* man/help2man: With these ANSI codes, output is corrupted,
	so it's best to strip these, which allows --help to
	outputting formatting and hyperlinks by default.

	doc: support highlighting printf formatted options
	* src/system.h (oprintf): Add a printf wrapper that
	calls oputs_() to markup the formatted text.

	doc: support more general option matching
	* src/system.h: Support "-p DIR, --tmpdir[=DIR]" option.
	Previously only the "-p" was highlighted.
	Support highlighting dd option syntax (no '-').
	Support test(1) "FILE1 -nt FILE2" syntax.

	doc: parse any whitespace as an option/description delimiter
	* src/system.c (oputs_): Use isspace() rather than hardcoding.
	Note we don't use c_isspace() as we need to support anything
	coming from translations.

	doc: optimize logic to disable SGR output in --help
	* src/system.h (oputs_): Simplify processing if neither
	MANUAL_URL or BOLD_MAN_REFS is defined.  Also ensure
	we only lookup the HELP_NO_MARKUP env var once per process.

	doc: move oputs() to system.h to support all commands
	* src/ls.c: Move non ls specific helper to ...
	* src/system.h: ... here.

	doc: support a configurable manual url
	* configure.ac: Support ./configure --enable-manual-url=...
	* src/ls.c (oputs): Adjust accordingly.

	doc: --help: --disable-bold-man-page-references configures bold refs
	* configure.ac: Adjust help text for --disable-bold-man-page-references,
	and also define BOLD_MAN_REFS.
	* src/ls.c (oputs): Output bold iff BOLD_MAN_REFS is defined.

	doc: ls: support styling and links in --help output
	* src/ls.c (oputs): A new function that wraps puts(),
	but also highlights the --option-text portion, and
	adds links to the appropriate part of the online manual.
	(usage): Call oputs() rather than puts().
	* doc/coreutils.texi (--help): Document new HELP_NO_MARKUP env var,
	which can be used in the edge case one wants to suppress ansi escapes.
	* tests/misc/getopt_vs_usage.sh: Use HELP_NO_MARKUP to ensure the
	test continues to pass.

	tests: test: ensure whitespace ignored when parsing numbers
	* tests/test/test.pl: Add a test case.

2026-01-21  Pádraig Brady  <P@draigBrady.com>

	cksum: use more accurate program name in single binary mode
	Following commit v9.9-109-gcd5229222

	* src/cksum.c (PROGRAM_NAME): In legacy mode, i.e., when built
	as a single binary, set the PROGRAM_NAME dynamically based on
	the selected digest type.  This is significant in --help
	to ensure the correct texinfo node is referenced, and in
	--version to ensure the correct utility name is output.

2026-01-20  Collin Funk  <collin.funk1@gmail.com>

	tests: dd: avoid a false test failure on Solaris 11.4
	* tests/dd/fail-ftruncate-fstat.sh: Replace the message used by Solaris
	11.4 for strerror (EPERM) with the one we expect.

2026-01-19  Collin Funk  <collin.funk1@gmail.com>

	tests: sync: check that all files are processed even when errors occur
	* tests/misc/sync.sh: Add the test case.

	tests: sync: also test that -d and -f don't block on a FIFO
	* tests/misc/sync.sh: Check 'sync fifo' with no arguments, -d, and -f
	separately. Only perform the check for -f if RUN_EXPENSIVE_TESTS=yes
	since it may be expensive.

2026-01-19  Pádraig Brady  <P@draigBrady.com>

	build: update to latest gnulib
	* gnulib: Update to latest.
	* NEWS: Mention the bug fix.
	https://github.com/coreutils/coreutils/issues/176

2026-01-18  oech3  <79379754+oech3@users.noreply.github.com>

	tests: env.sh: avoid multi-call binary considerations
	A simpler fix than commit v9.9-4-g3b6efd555
	which is less dependent on the exact behavior
	of a multi-call binary.

	* tests/env/env.sh: Use a local script rather than 'true'.
	which may be a symlinked multi-call binary.
	https://github.com/coreutils/coreutils/pull/174

2026-01-18  Collin Funk  <collin.funk1@gmail.com>

	doc: post process html with non-GNU make programs
	* .gitignore (/build-aux/makeinfo-wrapper.sh):
	* Makefile.am (EXTRA_DIST): Remove build-aux/makeinfo-wrapper.sh.
	* build-aux/makeinfo-wrapper.sh.in: New file, renamed from
	build-aux/makeinfo-wrapper.sh and modified to use @MAKEINFO@ instead of
	makeinfo.
	* cfg.mk (MAKEINFO): Remove variable.
	* configure.ac: Add build-aux/makeinfo-wrapper.sh as a configure file.
	* doc/local.mk (MAKEINFO): Define to
	$(abs_top_builddir)/build-aux/makeinfo-wrapper.sh.
	(AM_MAKEINFOFLAGS): Move over some values from the previous MAKEINFO
	definition.

2026-01-18  Pádraig Brady  <P@draigBrady.com>

	tests: strace: consider splice a "read" syscall
	* tests/cksum/cksum-c.sh: Add 'splice' to the injection set.
	* tests/misc/read-errors.sh: Likewise.
	From https://github.com/coreutils/coreutils/pull/167

2026-01-18  Pádraig Brady  <P@draigBrady.com>

	maint: prefer NULL to nullptr
	NULL is best for C as discussed at:
	https://bugs.gnu.org/66221#53

	* bootstrap.conf: Remove dependency on nullptr.
	* s/nullptr/NULL/.

2026-01-18  Pádraig Brady  <P@draigBrady.com>

	doc: add more redirections from legacy *sum to cksum
	*  doc/coreutils.texi (md5sum invocation, sha1sum invocation,
	b2sum invocation, sha2 utilities): Mention these are legacy interfaces,
	and reference 'cksum invocation'.
	*  src/cksum.c (usage): Likewise.
	*  man/md5sum.x: Redirect to cksum, rather than individual utils.
	*  man/sha1sum.x: Likewise.

	tests: use `command -v` to identify binary
	* tests/misc/coreutils.sh: Be more flexibile by using `command -v`
	to identify the binary to be executed, rather than linking
	directly to the built binary.

2026-01-18  Collin Funk  <collin.funk1@gmail.com>

	build: fix error building html documentation from tarball
	Reported by Egmont Koblinger <egmont@gmail.com> in
	<https://lists.gnu.org/r/coreutils/2026-01/msg00111.html>.

	* Makefile.am (EXTRA_DIST): Add build-aux/makeinfo-wrapper.sh.

2026-01-17  Collin Funk  <collin.funk1@gmail.com>

	tests: avoid a test hang on AIX
	* init.cfg (uses_strace_): New function.
	(require_strace_): Use it.
	tests/cksum/cksum-c.sh: Likewise.
	tests/misc/read-errors.sh: Likewise.

	build: update gnulib submodule to latest

2026-01-17  Pádraig Brady  <P@draigBrady.com>

	maint: remove sc_prohibit_NULL syntax check
	* cfg.mk: NULL is fine and good in C as per:
	https://bugs.gnu.org/66221#53

	build: update gnulib submodule to latest

2026-01-17  Collin Funk  <collin.funk1@gmail.com>

	maint: pacify another gcc -Wzero-as-null-pointer-constant warning
	* src/uptime.c (print_uptime): Add a timezone_t cast to zero. Don't use
	nullptr since timezone_t is not a standardized and may be defined to
	something other than a pointer.

2026-01-16  Paul Eggert  <eggert@cs.ucla.edu>

	maint: spelling fixes

	build: update gnulib submodule to latest

	maint: pacify gcc -Wzero-as-null-pointer-constant
	* src/basenc.c (long_options):
	* src/chcon.c (change_file_context):
	* src/copy.c (is_ancestor):
	* src/env.c (build_argv):
	* src/expr.c (nomoreargs):
	* src/factor.c (mp_no_factors):
	* src/ls.c (long_options, main):
	* src/selinux.c (defaultcon, restorecon_private):
	* src/shred.c (dopass):
	* src/shuf.c (long_opts):
	* src/tac.c (output):
	* src/test.c (term):
	* src/uniq.c (check_file): Do not use ‘0’ as a null pointer
	constant.  Although it is typically valid C, there are exceptions
	(e.g., stdarg) and it a bit cleaner to be consistent.  This patch
	uses NULL, not nullptr, as I have second thoughts about nullptr;
	see <https://bugs.gnu.org/66221#53>.

2026-01-16  Collin Funk  <collin.funk1@gmail.com>

	build: fix link errors with multi-call binary and 'cksum' excluded
	* src/local.mk (src_ls_LDADD, src_seq_LDADD, src_md5sum_LDADD)
	(src_sha1sum_LDADD, src_sha224sum_LDADD, src_sha256sum_LDADD)
	(src_sha384sum_LDADD, src_sha512sum_LDADD): Set to
	$(src_cksum_LDADD).
	Reported at https://github.com/coreutils/coreutils/issues/172

2026-01-15  Pádraig Brady  <P@draigBrady.com>

	all: with multi-call binary, only process options for known names
	Setup
	  $ ln -nsf src/coreutils foo

	Before
	  $ ./foo; echo $?
	  foo: unknown program ‘foo’
	  Try './foo --help' for more information.
	  1
	  ./foo --version; echo $?
	  coreutils (GNU coreutils) 9.9.172-01993
	  0

	After
	  $ ./foo; echo $?
	  coreutils: unknown program 'foo'
	  1
	  $ ./foo --version; echo $?
	  coreutils: unknown program 'foo'
	  1

	* src/coreutils.c (main): Don't process options if
	we don't know they're intended for the multi-call binary.
	Otherwise `foo --version` would return true, even though
	foo was symlinked to the multi-call binary, but not supported.
	* tests/misc/coreutils.sh: Add test cases.
	* NEWS: Mention the change in behavior.

2026-01-15  Pádraig Brady  <P@draigBrady.com>

	doc: paste: give a CSV generation example
	* doc/coreutils.texi (paste invocation): Provide an example
	to comma separate data.

2026-01-14  Pádraig Brady  <P@draigBrady.com>

	build: paste: fix build failure with C99
	GCC 10.2 gave the following error:
	"error: a label can only be part of a statement
	 and a declaration is not a statement"

	* src/fold.c (fold_file): Add a ";" to avoid C2X specific syntax.

2026-01-14  Collin Funk  <collin.funk1@gmail.com>

	maint: avoid syntax-check failure from previous commit
	* src/copy-file-data.c (sparse_copy): Use nullptr instead of NULL.

2026-01-13  Paul Eggert  <eggert@cs.ucla.edu>

	cat: don’t treat copy_file_range EFBIG as fatal
	* src/cat.c (copy_cat):
	* src/copy-file-data.c (sparse_copy):
	Don’t treat EFBIG as a reportable error from copy_file_range.
	If the input is at EOF and the output position is 2**63 - 1,
	copy_file_range (ifd, NULL, ofd, NULL, 2146435072, 0)
	incorrectly fails with EFBIG.  Problem observed on Ubuntu 25.10
	x86-64 with Linux kernel 6.17.0-8-generic #8-Ubuntu.
	I am too lazy to report this kernel bug or add a coreutils test case.

	build: update gnulib submodule to latest

	cp: copy-file-data.c commentary fixes
	* src/copy-file-data.c: Update commentary to match code better.

2026-01-13  Pádraig Brady  <P@draigBrady.com>

	tests: ensure utilities correctly diagnose read errors
	* tests/misc/read-errors.sh: Ensure each utility calls a
	read system call as requested.  Not doing so (say by avoiding
	reading from a directory) is a layering violation.
	Also ensure we diagnose the particular error encountered.

	fmt: correctly diagnose read errors
	* src/fmt.c (fmt): Pass errno to error() so that
	the particular error is diagnosed.
	* NEWS: Mention the improvement.

	paste: support multi-byte delimiters
	* src/paste.c (collapse_escapes): This is the central --delimiters
	parsing function, so adjust to handle multi-byte chars with
	mcel_scanz().  Populate a delimiters length array to support
	characters of differing lengths.
	(paste_serial): Use the delimiters length array to output
	the appropriate delimiter.
	(paste_parallel): Likewise.
	* tests/paste/multi-byte.sh: A new test.
	* tests/local.mk: Reference the new test.
	* NEWS: Mention the improvement.

2026-01-13  oech3  <79379754+oech3@users.noreply.github.com>

	tests: nice: ensure large values are clamped
	* tests/nice/nice.sh: Ensure integers > UINTMAX_MAX are supported.
	From https://github.com/coreutils/coreutils/pull/170

2026-01-13  Collin Funk  <collin.funk1@gmail.com>

	maint: ptx: place long options without short options after CHAR_MAX
	* src/ptx.c (FORMAT_OPTION): New constant.
	(long_options): Use FORMAT_OPTION instead of 10.
	(main): Likewise.

2026-01-12  Dmitry V. Levin  <ldv@altlinux.org>

	tests: cksum: use more general strace syscall injection
	* tests/cksum/cksum-c.sh: Match "read" with a regex
	to match any of the read syscall variants.

2026-01-12  Pádraig Brady  <P@draigBrady.com>

	tests: paste -d: test supported escape sequences
	* tests/misc/paste.pl: Test all supported POSIX and GNU
	backslash escape sequences.

	doc: paste: add more detail on operation and options
	* src/paste.c (usage): Mention how lines are processed
	with and without the -s option.  Also mention that -d
	supports backslash escapes.
	* doc/coreutils.texi (paste invocation): Likewise.
	Also detail the backslash escapes, noting which are non-POSIX.

2026-01-12  Collin Funk  <collin.funk1@gmail.com>

	maint: ptx: reuse octhexdigits macros instead of redefining them
	* src/ptx.c: Include octhexdigits.h.
	(HEXTOBIN, ISODIGIT, OCTTOBIN): Remove macros.
	(unescape_string): Use the macros from octhexdigits.h instead of the
	removed macros.

2026-01-11  Pádraig Brady  <P@draigBrady.com>

	tests: date: test nested parenthesis comment handling
	* tests/date/date.pl: Add test cases.
	Suggested by Sylvestre Ledru.

	doc: runcon: use more accurate synopsis format
	* src/runcon.c (usage): Align synopsis with format
	used in other commands.
	* doc/coreutils.texi (runcon invocation): Likewise.

2026-01-11  oech3  <79379754+oech3@users.noreply.github.com>

	tests: cksum: ensure --check handles I/O errors
	* tests/cksum/cksum-c.sh: Use strace to inject EIO upon read(),
	and verify it's handled appropriately.
	From https://github.com/coreutils/coreutils/pull/167

2026-01-11  Pádraig Brady  <P@draigBrady.com>

	tests: cksum: ensure --check diagnoses read errors
	* tests/misc/read-errors.sh: Add a test case.
	Discussed in https://github.com/coreutils/coreutils/pull/167

2026-01-11  Pádraig Brady  <P@draigBrady.com>

	build: support 'dist' and 'syntax-check' targets without libselinux
	Following on from commit v9.8-60-g8ba47d09a ...
	Without libselinux installed, runcon and chcon stub binaries
	will not be built by default.  We separate these utilities out
	to a separate "not built unless appropriate" class, so that
	we can add these to EXTRA_MANS so that the 'check-x-vs-1'
	target doesn't fail, and the 'dist' target includes
	these man pages.

	* build-aux/gen-lists-of-programs.sh: Separate out
	build_if_appropriate_progs, and propagate that through
	to no_install_progs_default which populates EXTRA_MANS.
	* src/local.mk: Separate out build_if_appropriate__progs
	for clarity and consistency.

2026-01-11  Pádraig Brady  <P@draigBrady.com>

	build: update gnulib submodule to latest
	* gnulib: Update to latest mainly to pull in selinux module fixes.
	* NEWS: Mention the build fix to honor --with-selinux building
	stub chcon and runcon binaries on systems without libselinux.

2026-01-10  Collin Funk  <collin.funk1@gmail.com>

	cksum: promptly diagnose write errors
	* src/cksum.c (output_file, digest_check): Check if standard output has
	it's error flag set after printing.
	* tests/misc/write-errors.sh: Add a test case that would previously run
	forever.
	* NEWS: Mention the improvement. Reorder alphabetically.

2026-01-10  Pádraig Brady  <P@draigBrady.com>

	maint: remove redundant processing in a test
	* tests/misc/write-errors.sh: This was a no-op anyway
	due to inadequate escaping.  Also document the escaping requirement.

	du: promptly diagnose write errors
	* src/du.c (print_size): Call write_error() if can't flush.
	* tests/misc/write-errors.sh: Add a test case.
	* NEWS: Mention the improvement.

	wc: promptly diagnose write errors
	* src/wc.c (write_counts): Call write_error() if any pending errors.
	* tests/misc/write-errors.sh: Add a test case.
	* NEWS: Mention the improvement.

2026-01-09  Collin Funk  <collin.funk1@gmail.com>

	readlink,realpath: promptly diagnose write errors
	The 'readlink' and 'realpath' programs have an uncommon case where they
	can run for a very long time. When canonicalizing file names longer than
	PATH_MAX, we have to call 'openat' for each directory up the tree until
	we reach root which takes a long time. Here is an example of the current
	behavior:

	    $ mkdir -p $(yes a/ | head -n $((32 * 1024)) | tr -d '\n')
	    $ while cd $(yes a/ | head -n 1024 | tr -d '\n'); do :; \
	        done 2>/dev/null
	    $ pwd | tr '/' '\n' | wc -l
	    32771
	    $ env time --format=%E readlink -f $(yes . | head -n 5) > /dev/full
	    readlink: write error: No space left on device
	    Command exited with non-zero status 1
	    0:59.72
	    $ env time --format=%E realpath $(yes . | head -n 5) > /dev/full
	    realpath: write error: No space left on device
	    Command exited with non-zero status 1
	    1:00.32

	It is better to exit as soon as there is an error writing to standard
	output:

	    $ env time --format=%E readlink -f $(yes . | head -n 5) > /dev/full
	    readlink: write error: No space left on device
	    Command exited with non-zero status 1
	    0:11.88
	    $ env time --format=%E realpath $(yes . | head -n 5) > /dev/full
	    realpath: write error: No space left on device
	    Command exited with non-zero status 1
	    0:12.04

	* src/readlink.c (main): Check if standard output has it's error flag
	set after printing a file name.
	* src/realpath.c (process_path): Likewise.
	* NEWS: Mention the improvement.

2026-01-08  Pádraig Brady  <P@draigBrady.com>

	cksum: validate options more consistently
	We disallow `cksum --tag --check` which is fine,
	but the error should be consistent with md5sum,
	and less confusing, as it currently mentions
	"--binary" and "--text" which weren't specified.

	We disallow `cksum --tag --text` which is fine,
	but we should also disallow `cksum --text --tag`.

	We should honor an explicit --binary (output *)
	with this combination of options:
	cksum --binary --tag --untagged -a md5 /dev/null

	Note this also makes both of `cksum -a md5` and
	`cksum --tag -a md5` consistently use binary mode
	when reading from a tty on systems like MinGW
	where O_BINARY is set.

	* src/cksum.c (main): Adjust --text,--binary
	and --tag,--untagged option processing.
	* tests/cksum/cksum-a.sh: Add test cases.
	* tests/cksum/cksum-c.sh: Likewise.
	* NEWS: Mention the improvement.
	Fixes https://github.com/coreutils/coreutils/issues/163

2026-01-08  Pádraig Brady  <P@draigBrady.com>

	tests: chmod: fix false failure in recent test
	* tests/chmod/partial-fail.sh: Test readablility of mode 0 files
	independently, to avoid false failure, e.g., when run as root.
	Reported by Bruno Haible.

2026-01-08  Pádraig Brady  <P@draigBrady.com>

	tests: tail/overlay-headers.sh: fix various issues
	* tests/tail/overlay-headers.sh (cleanup_): Ensure we send SIGCONT
	to the tail process, otherwise we would hang if the test is terminated
	while the tail process is in stopped state.
	(wait4stopped_): A new function to ensure tail is in the stopped state
	before we start writing to the monitored files.
	Also remove "---disable-inotify" from $fastpoll so we actually
	test the inotify code (where supported).
	Also remove the timeout(1) wrapper, so we actually suspend tail(1).

	Reported by Bruno Haible on macOS 26

2026-01-08  Pádraig Brady  <P@draigBrady.com>

	fmt: interpret -w as an inclusive maximum
	This aligns with `fold -w` and BSD `fmt` implementations.

	* src/fmt.c (fmt_paragraph): Check len <= max_width.
	* tests/fmt/width.sh: Add a new test.
	* tests/local.mk: Reference the new test.
	* NEWS: Mention the change in behavior.
	Addresses part of https://bugs.gnu.org/79497

2026-01-08  Sylvestre Ledru  <sylvestre@debian.org>

	tests: date: test parenthesis comment handling
	* tests/date/date.pl: Add the check.

2026-01-07  Collin Funk  <collin.funk1@gmail.com>

	maint: organize mktemp tests in a subdirectory
	* tests/misc/mktemp.pl: Moved to tests/mktemp/mktemp.pl.
	* tests/local.mk (all_tests): Adjust the file name.

	tests: mktemp: add tests for invalid Unicode options
	* init.cfg (bad_unicode): New function, copied from
	tests/fold/fold-characters.sh with the NUL removed.
	* tests/fold/fold-characters.sh (bad_unicode): Rename to
	bad_unicode_with_nul. Reformat long line.
	* tests/mktemp/bad-unicode.sh: New test.
	* tests/local.mk (all_tests): Add the new test.

2026-01-06  Pádraig Brady  <P@draigBrady.com>

	copy: protect against infinite loop due to pathological race
	Consider:

	1. In infer_scantype():
	    - SEEK_DATA returns 0
	      - hole punched at 0
	    - SEEK_HOLE returns 0 (now a hole)
	    - Cache scan_inference->hole_start = 0
	2. In lseek_copy():
	      - data written at 0
	    - ext_start = 0, use cached hole_start = 0
	    - ext_len = 0
	    - now loop doesn't progress

	* src/copy-file-data.c (lseek_copy): Apply a more defensive check
	to ensure we only use the cached offsets in SCAN_INFERENCE once.
	This protects against an infinite loop where an extent (at SRC_POS)
	flip flops between data and hole extent while infer_scantype()
	and lseek_copy() are inspecting it.  I.e. ensure we use SEEK_HOLE
	to progress the copy.

2026-01-06  Pádraig Brady  <P@draigBrady.com>

	tests: cp: fix always skipped nfs-removal-race.sh
	* tests/cp/nfs-removal-race.sh: This test was invalid since v8.32
	as we now use fstatat() rather than stat().  Also since commit
	v9.0-66-ge2daa8f79 we leverage the errno from open(O_DIRECTORY)
	to avoid a stat, so pass --no-target-directory to ensure fstatat()
	is called.
	Discussed in https://github.com/coreutils/coreutils/pull/161

2026-01-06  Christopher Illarionova  <drydench@amazon.com>

	tests: cp: support glibc 2.33+ in nfs-removal-race test
	glibc 2.33 removed __xstat, making stat() a direct symbol. This test
	previously only intercepted __xstat, causing it to skip on modern glibc
	with 'LD_PRELOAD was ineffective'.

	Changes:
	- Intercept both __xstat (glibc < 2.33) and stat (glibc >= 2.33)
	- Only mark 'preloaded' when stat is called on destination 'd',
	  ensuring the test verifies cp actually stats the destination

2026-01-06  Pádraig Brady  <P@draigBrady.com>

	doc: tr: warn about shell quoting [:classes:]
	* src/tr.c (usage): Warn about avoiding shell globbing.
	* doc/coreutils.texi (character arrays): Likewise.
	Suggested by Daniel Dallos.

2026-01-05  Pádraig Brady  <P@draigBrady.com>

	ptx: implement -t to change default width to 100
	Align the -t implementation with the Heirloom project.

	* src/ptx.c (usage): Describe -t, and also mention
	the default width is 72 when not used.
	* doc/coreutils.texi (ptx invocation): Likewise.
	(main): Override the default width if -t is specified.
	* tests/ptx/ptx.pl: Add test cases.
	* NEWS: Mention the change in behavior.

2026-01-05  Christopher Illarionova  <drydench@amazon.com>

	tests: stty: add require_controlling_input_terminal_ to bad-speed test
	The bad-speed test runs 'stty ispeed 9600' without a --file argument,
	which requires a controlling terminal. Without it, stty fails early with
	'Inappropriate ioctl for device' before reaching cfsetispeed, causing
	the test to skip with a misleading 'LD_PRELOAD interception failed'
	message.

	* tests/stty/bad-speed.sh: Add require_controlling_input_terminal_
	to match the other stty tests (stty.sh, stty-pairs.sh, stty-row-col.sh,
	stty-invalid.sh) which all require a controlling terminal.
	From https://github.com/coreutils/coreutils/pull/160

2026-01-04  Collin Funk  <collin.funk1@gmail.com>

