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

	version 9.12
	* NEWS: Record release date.

2026-09-14  Ismail Ramzi  <ismail@bugqore.com>

	ls: fix use-after-free reading LS_COLORS ln=target
	parse_ls_color stores color_indicator[C_LINK].string as a pointer into
	the color_buf buffer, then frees color_buf on the unparsable-value path.
	The "ln=target" check after the parse loop still read that freed buffer,
	e.g. with LS_COLORS='ln=target:x'.  Skip it on the failure path, where
	color output is disabled anyway and the buffer is gone.
	* src/ls.c (parse_ls_color): Return after freeing color_buf on failure,
	so the color_indicator[C_LINK] check only runs when the buffer is live.
	* tests/ls/color-symlink-target.sh: New test.
	* tests/local.mk (all_tests): Add it.
	* NEWS: Mention the fix.

	Link: https://github.com/coreutils/coreutils/pull/352

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

	tests: cp: avoid a false failure on GNU/Hurd
	* tests/cp/sparse-to-pipe.sh: Use 'cp -T' to avoid opening the fifo as a
	target directory, which causes GNU/Hurd to wait for a writer.

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

	tests: dd: fix a test that would never finish on GNU/Hurd
	On GNU/Hurd, this test would get stuck in an infinite loop like the
	following:

	    + kill -s INFO 16535
	    + sleep .01
	    + kill -s INFO 16535
	    + sleep .01
	    + kill -s INFO 16535
	    + sleep .01
	    [...]

	The signals being sent that frequently seem to prevent 'dd' from
	performing writes, since it outputs the following during that time:

	    0+0 records in
	    0+0 records out
	    0 bytes copied, 7161.11 s, 0.0 kB/s
	    0+0 records in
	    0+0 records out
	    0 bytes copied, 7161.88 s, 0.0 kB/s
	    [...]

	* tests/dd/stats.sh: Use a larger interval between signals on GNU/Hurd.

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

	tests: printenv: fix a false failure on GNU/Hurd
	* tests/misc/printenv.sh: Also filter out LD_ORIGIN_PATH.

	tests: split: avoid a hang on GNU/Hurd
	* tests/split/suffix-length.sh: Don't run a test on GNU/Hurd.

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

	tests: avoid hangs with strace on cygwin
	`strace -e tee true` will run the tee command on cygwin,
	rather than filtering for the tee syscall.
	Reported by Bruno Haible on Cygwin 2.9.0

	* init.cfg: Use -e trace=foo where foo might be a command,
	so that strace probes will fail rather than invoke foo on Cygwin.
	* tests/cat/cat-distinct-err.sh: Likewise.
	* tests/cat/splice.sh: Likewise.
	* tests/ls/no-cap.sh: Likewise.
	* tests/misc/yes.sh: Likewise.
	* tests/mv/atomic.sh: Likewise.
	* tests/mv/atomic2.sh: Likewise.
	* tests/nproc/nproc-quota.sh: Likewise.
	* tests/pwd/pwd-long.sh: Likewise.
	* tests/stty/stty.sh: Likewise.
	* tests/tail/debug.sh: Likewise.
	* tests/tail/inotify-only-regular.sh: Likewise.

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

	tests: sort: avoid a false failure on very slow systems
	* tests/sort/sort-NaN-infloop.sh: Up the timeout to about 240x
	a "standard" system, as this was seen to timeout on a
	mipsel VM using QEMU emulation.
	Reported by Bruno Haible.

	tests: dd: avoid false failure due to restricted memory
	* tests/dd/no-allocate.sh: Expand memory restriction
	(and allocated buffers) by 6MiB, to give more head-room
	to the shell.
	Reported and tested by Bruno Haible on OpenIndiana (from 2025).

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

	tests: sort: avoid a failure on GNU/Hurd
	On GNU/Hurd, file descriptor limits set via 'ulimit -n' seem to be
	ineffective when set below the default:

	    $ (ulimit -n; ulimit -n 512; ulimit -n; \
	         tee $(seq 1024) < /dev/null; echo $?)
	    1024
	    512
	    tee: 1022: Too many open files
	    tee: 1023: Too many open files
	    tee: 1024: Too many open files
	    1

	* tests/sort/sort-merge-fdlimit.sh: Don't fail if using 'ulimit -n' to
	decrease the file descriptor limit is ineffective.

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

	tests: env: fix a false failure on GNU/Hurd
	* tests/env/env.sh: Also filter out LD_ORIGIN_PATH.

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

	tests: install: avoid failure on macOS
	* tests/install/stdin.sh: Avoid failure on macOS for now.
	In future we may support this feature on macOS as discussed at:
	https://lists.gnu.org/r/coreutils/2026-06/msg00004.html

	tests: dd: avoid false failure with older strace
	* tests/dd/fail-ftruncate-fstat.sh: Ensure strace intercepts
	the call, which was not the case on strace 6.19 on Alpine 3.24.1.

	tests: stat: avoid false failure with LeakSanitizer
	* tests/stat/stat-mount.sh: LeakSanitizer requires /proc access
	for instrumented binaries, so ensure we're checking coreutils
	binaries, rather than shell builtins.

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

	stat,tail: recognize failfs file system type
	* src/stat.c (human_fstype): Add "failfs" (0x4641494C).
	* NEWS: Mention the improvement.

	doc: remove older ChangeLog items
	* Makefile.am: Update the oldest documented version
	to 9.0 which is now about 5 years old.

	build: update gnulib submodule to latest
	* gnulib: Update to latest.

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

	tests: df: skip a test on WSL
	* tests/df/skip-rootfs.sh: Test for /init which is listed as rootfs in
	/proc/self/mountinfo, but tmpfs according to statfs.
	Fixes https://bugs.gnu.org/65331

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

	build: sort: explicitly tag libcrypto dependency
	This adds an ELF note as per the UAPI Group's .note.dlopen spec:

	  $ readelf -p .note.dlopen src/sort
	  String dump of section '.note.dlopen':
	    [     4]  y
	    [     a]  |@FDO
	    [    10]  [{"feature":"random-sort",
	                "description":"Support for random sorting",
	                "priority":"required",
	                "soname":["libcrypto.so.3"]}]

	* bootstrap.conf: Add sd-dlopen.
	* src/sort.c (DLOPEN_LIBCRYPTO && HAVE_OPENSSL_MD5): Add an ELF note
	with SD_ELF_NOTE_DLOPEN() so that packagers can determine the libcrypto
	dependency, needed when --random-sort is specified.
	* NEWS: Mention the Build-related change.

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

	doc: NEWS: fix mismatched quotation marks
	* NEWS: Use '...' instead of '...`.

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

	cut: simplify multi-byte field processing
	Simplify cut_fields_mb_any() used with:

	  -w in a multi-byte locale, including UTF-8
	  --w=trimmed in any locale, including C
	  -f -d CHAR in non utf-8 multi-byte locale
	  -f -d CHAR in utf-8 with certain invalid CHARs

	This is a net reducation of 24 lines,
	and is performance neutral.

	(cut_fields_mb_any): Use persistent first field and output state.
	This allows using the existing field output helpers and
	avoiding separate first field and line completion handling.
	(cut_fields_bytesearch): Handle blanks explicitly.
	(finish_current_line): Remove redundant condition.

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

	cut: -w: optimize extracting the start of a line
	There were no significant performance changes from the test cases
	in commit a325c9978, but adding additional whitespace delimited cases
	shows significant improvement.  Below, with -f1, typical space delimited
	input shows 4x more throughput, while the long line test shows 17x more.

	Performance was tested with GCC 16 on an i7-5600U with
	CFLAGS='-march=native -O3 -flto' with the following setup:

	$ yes | head -n10M > sl.in
	$ yes $(yes eeeaae | head -n10K | paste -s -d' ') | head -n10K > llw.in
	$ yes $(yes eeeaae | head -n9 | paste -s -d' ') | head -n1M > asw.in
	$ yes $(yes éééááé | head -n9 | paste -s -d$'\xe2\x80\x83') |
	   head -n1M > mbw.in

	for type in sl llw asw mbw; do
	  cat $type.in >/dev/null;
	  for imp in '-before' '-after'; do
	    echo ============ "${imp:-base}" $type ==============;
	    for d in -w; do
	      fields='-f1 -f10 -f100'
	      test "$d" = "-b" && { fields='-b1 -b10 -b100'; d=''; }
	      test "$d" = "-c" && { fields='-c1 -c10 -c100'; d=''; }
	      for f in $fields; do
	        for loc in C.UTF-8; do
	          # Skip -b for UTF-8 as no different
	          test "$loc" = C.UTF-8 && echo "$f" | grep -q -- -b \
	           && continue
	          # Skip multi-byte delimiter for C and not allowed
	          test "$loc" = C && test $(echo -n "$d" | wc -c) -ge 4 \
	           && continue
	          bin=src/cut${imp}
	          LC_ALL=$loc $bin $f $d /dev/null 2>/dev/null &&
	          hyperfine --warmup=2 -m2 -M6 \
	           "LC_ALL=$loc $bin $f $d $type.in >/dev/null" ||
	          printf 'Benchmark 1: %s\n  unsupported\n\n' \
	           "LC_ALL=$loc $bin $f $d $type.in >/dev/null"
	        done;
	      done;
	    done;
	  done;
	done

	After a little post-processing of the results, we get:

	-- src/cut-before

	| command         |       sl |      llw |      asw |      mbw |
	| --------------- | -------- | -------- | -------- | -------- |
	| UTF8 -f1 -w     |  96.2 ms |  1.916 s | 190.6 ms | 906.5 ms |
	| UTF8 -f10 -w    | 104.6 ms |  1.921 s | 187.7 ms | 845.6 ms |
	| UTF8 -f100 -w   | 104.4 ms |  1.916 s | 187.4 ms | 846.4 ms |

	-- src/cut-after

	| command         |       sl |      llw |      asw |      mbw |
	| --------------- | -------- | -------- | -------- | -------- |
	| UTF8 -f1 -w     |  88.7 ms | 112.4 ms |  43.5 ms | 146.3 ms |
	| UTF8 -f10 -w    |  95.2 ms | 114.4 ms | 193.5 ms | 848.4 ms |
	| UTF8 -f100 -w   |  94.8 ms | 130.6 ms | 194.4 ms | 848.1 ms |

	* src/cut.c (scan_mb_line_end): A new function to skip
	to EOL once we have exhausted the field selection.
	(cut_fields_mb_any): Only skip after recognizing a field delimiter.
	* tests/cut/cut.pl: Add test cases.
	* tests/cut/mb-non-utf8.sh: Likewise.
	* NEWS: Mention the improvement.

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

	cut: -w: avoid per character function calls
	Adding a couple of inlining hints to the compiler
	gives a 30% boost in raw character processing performance
	in cut_fields_mb_any().

	  $ yes $(yes eeeaae | head -n10K | paste -s -d,) | head -n10K > ll.in

	  $ time LC_ALL=C.UTF-8 src/cut-before -f1 -w ll.in >/dev/null
	  real	0m2.279s

	  $ time LC_ALL=C.UTF-8 src/cut-after -f1 -w ll.in >/dev/null
	  real	0m1.619s

	* src/cut.c (scan_mb_blank_field): Tag as inline.
	(scan_mb_delim_field): Likewise.

2026-09-03  Paul Eggert  <eggert@cs.ucla.edu>

	cp: ioctl+FICLONE EIO now fails without fallback
	Problem reported by Pádraig Brady (bug#81776#16).
	* src/copy.c (handle_clone_fail): Be more cautious if
	ioctl+FICLONE failed with EIO; do not fall back to read+write,
	even if --reflink=auto is in effect.

2026-09-02  Paul Eggert  <eggert@cs.ucla.edu>

	cp: --debug now reports clone/offload fail errno
	* src/copy.h: Use errno values for syscall failures, and
	negative values otherwise.  That way, debugging output can
	contain more info when clone or offload ops fail.
	All uses changed.

	cp: treat EDQUOT etc. like ENOSPC
	Assume that XFS allocation groups can also fail with EDQUOT etc.,
	so treat those failures like ENOSPC.
	* src/copy.c (is_terminal_error): Remove; no longer used.
	(handle_clone_fail): Remove DEST_DESC arg; no longer needed.
	All uses changed.  Simplify by acting as if is_terminal_error
	always returns false.  Change "!= 0" to "< 0" when either will do
	for a syscall, as a matter of convention.

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

	cp,install,mv: try a standard copy if clone fails with ENOSPC
	reflinking can fail due to failure to allocate metadata,
	while a standard copy may succeed.

	* src/copy.c (is_terminal_error): Remove ENOSPC from the list.
	Fixes https://bugs.gnu.org/81776

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

	tests: tail: avoid intermittent failure on NetBSD
	It seems that NetBSD requires a fifo to be open, not merely opened,
	to ensure a subsequent open proceeds. Immediately closing the opened
	fifo caused intermittent failures on NetBSD 10.0.  While that seems
	like a bug in NetBSD, we can avoid the issue.

	* tests/tail/pid-pipe.sh: Hold the fifo open until our writer
	has opened it.  This also allows specifying a single timeout
	(of 12.7s), rather than 2 separate timeouts.

2026-09-01  H. Peter Anvin  <hpa@zytor.com>

	stty: handle kernel speed encoding variations
	eq_mode(), which is used to determine if tcsetattr() was successful,
	failed unnecessarily after speed setting under certain circumstances:

	1. the kernel MAY round the speed to the nearest supported value,
	   so allow a variation of +/- 1/4 bit time per character from
	   what was originally requested.

	2. There MAY be more than one internal binary encoding of a specific
	   speed (e.g. on Linux). On systems where that information
	   affects c_cflag, this may introduce inconsistencies;
	   filter out the known speed-related flags in c_cflag.

	3. It is undefined in POSIX if cfsetispeed (..., 0) is retained or
	   normalized across tcsetattr () ... tcgetattr ().
	   If cfgetispeed () returns 0, compare the output speed instead.

	* src/stty.c (eq_mode): Mask of some of the speed related bits
	to avoid checking them for exact equality.
	(speed_matches): A new helper to apply the more lenient matching
	of requested and resulting speeds.
	* NEWS: Mention the bug fix.

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

	printenv: don't quote output when given arguments and redirected
	* src/printenv.c (main): Make sure quoting is disabled when we have
	arguments and standard output is not a terminal.
	* tests/misc/printenv.sh: Adjust single argument test cases. Add
	multiple argument test cases.
	* tests/misc/tty-quoting.sh: Add test cases to check if isatty is used.
	* doc/coreutils.texi (printenvAlwaysQuoted): Remove macro.
	(printenv invocation): Describe the adjusted quoting behavior.
	(env invocation): Move the text from printenvAlwaysQuoted here since it
	is no longer used for 'printenv'.

	tests: csplit: test the behavior with an empty pattern
	* tests/csplit/csplit.sh: Add a test case.

	tests: mv: test the behavior of symbolic links to "."
	* tests/mv/part-hardlink-symlink.sh: Add a test case.

2026-08-31  oech3  <79379754+oech3@users.noreply.github.com>

	tests: dd: support referencing of external test command
	* tests/dd/stderr.sh: Use env instead of
	$abs_top_builddir for external usage of tests.

	Link: https://github.com/coreutils/coreutils/pull/340

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

	tests: date: check that composite specifiers ignore the '-' flag
	* tests/date/date.pl: Add tests ensuring that %-D, %-F, %-T, %-R, %-r,
	%-x and %-X keep the default padding of their sub-fields, while the
	other flags and the field width still apply to the whole expansion.
	https://github.com/uutils/coreutils/pull/14163

	Link: https://github.com/coreutils/coreutils/pull/339

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

	build: update gnulib submodule to latest
	Update specifically to get commit 91c129e9db fixing:

	  $ date-before -d '1-2-3' "+[%_D]"
	  [02/03/ 1]
	  $ date-after -d '1-2-3' "+[%_D]"
	  [02/03/01]

	* gnulib: Update to latest.
	* NEWS: Mention the bug fix.

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

	doc: printf: resync format examples in texinfo
	* doc/coreutils.text (printf invocation): Sync the issues
	fixed in the previous commit to the texinfo examples.

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

	doc: printf: fix typos in format examples
	* src/printf.c (usage): Remove redundant quotes.
	Change ambiguous quotes. Fix typos in examples.
	Quoting changes suggested by Martin D Kealey.

2026-08-29  Collin Funk  <collin.funk1@gmail.com>

	tests: misc: test that various commands don't fork
	* tests/misc/no-fork.sh: New file.
	* tests/local.mk (all_tests): Add the new test.
	* tests/misc/stdbuf.sh: Remove a test that is redundant with the new
	test.

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

	tests: mv: check cross-device move of dir with hard links and symlink
	* tests/mv/part-hardlink-symlink.sh: New test, ensuring that moving a
	directory to another file system preserves the contents and the hard
	links of its regular files, as well as the symlinks pointing at them.
	* tests/local.mk (all_tests): Add it.
	https://github.com/uutils/coreutils/pull/14170

	Link: https://github.com/coreutils/coreutils/pull/337

2026-08-27  oech3  <79379754+oech3@users.noreply.github.com>

	tests: misc: support referencing of external commands
	* tests/misc/close-stdout.sh: Use env instead of
	$abs_top_builddir for external usage of tests.

	Link: https://github.com/coreutils/coreutils/pull/338

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

	env: translate -v messages
	* src/env.c: These user facing messages should be translated.

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

	env: ensure all -v messages are quoted
	$ env-before -v -u 'B' -S 'A=1 B="\n"' 'true'
	split -S:  ‘A=1 B="\\n"’
	 into:    ‘A=1’
	     &    ‘B=\n’
	unset:    B
	setenv:   A=1
	setenv:   B=

	executing: true
	   arg[0]= ‘true’

	$ src/env-after -v -u 'B' -S 'A=1 B="\n"' 'true'
	split -S:  ‘A=1 B="\\n"’
	 into:     ‘A=1’
	     &     ‘B=\n’
	unsetting: ‘B’
	setting:   ‘A=1’
	setting:   ‘B=\n’
	executing: ‘true’
	   arg[0]= ‘true’

	* src/env.c: -v is often used to debug spacing issues,
	so it's important to quote output.

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

	env: use more abstract -v messages
	* src/env.c: These user facing messages should
	be more descriptive and abstract.  Also improve alignment.

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

	tests: printf: add tests for the %b specifier
	* tests/printf/printf-cov.pl ($ESCAPE_CHARS, $ESCAPE_OUTPUT): New
	variables derived from the existing 'escape-1' test.
	(@Tests): Add some additional escaping tests and test %b.

	tests: sort: check that non-blank characters aren't treated as blank
	* tests/sort/sort.pl (@Tests): Add a few test cases.

2026-08-26  oech3  <79379754+oech3@users.noreply.github.com>

	tests: env: support referencing of external env
	* tests/env/env-S-script.sh: Use `cmd_exe` instead of
	$abs_top_builddir for external usage of tests.

	Link: https://github.com/coreutils/coreutils/pull/336

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

	tests: provide a cmd_exe helper to find a program binary
	init.cfg (cmd_exe): Provide a function to find the command under test,
	whether in the $PATH or in the standard build directory.
	* tests/env/env0-from.sh: Use it instead of `command -v`.
	* tests/misc/coreutils.sh: Likewise.
	* tests/nproc/nproc-quota.sh: Likewise.
	* tests/env/env.sh: Likewise.  Also remove non robust use of sed.

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

	tests: join: cover a repeated -o
	* tests/join/join.pl: Test that the field specs of several -o options
	accumulate in order, and that 'auto' applies only when every -o
	argument is 'auto'.
	Identified here: https://github.com/uutils/coreutils/pull/14070

	Link: https://github.com/coreutils/coreutils/pull/335

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

	tests: cp: exercise copying with a write-denying umask
	* tests/cp/preserve-mode.sh: Ensure that with a umask that removes
	the owner write bit, cp still fully writes a freshly created
	destination file and gives it the expected mode.
	  Missing case identified here:
	  https://bugs.launchpad.net/ubuntu/+source/rust-coreutils/+bug/2164777

	Link: https://github.com/coreutils/coreutils/pull/334

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

	tests: stat: check output preceding an invalid directive
	* tests/stat/stat-printf.pl: The format is interpreted as it is printed,
	so whatever precedes an invalid directive is written before the
	diagnostic, and --format adds no trailing newline when it stops early.
	The existing err-1 and err-2 cases put the directive at the start of the
	format, so nothing covered this.
	See https://github.com/uutils/coreutils/issues/14101

	Link: https://github.com/coreutils/coreutils/pull/333

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

	tests: expand, unexpand: check blank-separated tab lists
	parse_tab_stops accepts a comma or any blank as a separator, but the
	tests only ever used a comma or a space, so a tab separator was
	untested.  unexpand had no coverage of multi-stop lists at all.
	Missing case identified here:
	https://github.com/uutils/coreutils/pull/14057

	* tests/expand/expand.pl (t4a): New test, using tabs as separators.
	* tests/unexpand/unexpand.pl (tabs-3, tabs-4, tabs-5, tabs-6): New
	tests, for comma-, space- and tab-separated lists and for a leading
	separator.

	Link: https://github.com/coreutils/coreutils/pull/332

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

	tests: env: avoid false failure on FreeBSD
	Avoid unsetenv() on a non standard environment,
	as FreeBSD 14 and 15 at least fail when manipulating
	such an environment with unsetenv().

	  $ printf 'A=1\0A=2\0foo\0' |
	    src/env --env0-from=- src/env foo=bar | grep foo
	  foo=bar
	  foo

	  $ printf 'A=1\0A=2\0foo\0' |
	    src/env --env0-from=- src/env -u foo
	  env: environment corrupt; missing value for foo
	  env: cannot unset ‘foo’: Bad address

	  $ printf 'A=1\0A=2\0foo\0' |
	    src/env --env0-from=- src/env -u bar
	  env: environment corrupt; missing value for foo
	  env: cannot unset ‘bar’: Bad address

	* tests/env/env0-from.sh: Use routines internal to env(1)
	to manipulate the environment, only delegating the
	executed env(1) to adding any implicit environment variables.
	Reported by Bruno Haible.

2026-08-26  Collin Funk  <collin.funk1@gmail.com>

	build: update gnulib submodule to latest

	tests: stat: fix a test failure on FreeBSD
	* tests/stat/stat-nanoseconds.sh: Don't assume that we can create a file
	with timestamps before the epoch.
	Reported by Bruno Haible.

2026-08-25  Paul Eggert  <eggert@cs.ucla.edu>

	maint: translate messages from Gnulib
	Problem reported by ribbon in:
	https://lists.gnu.org/r/coreutils/2026-08/msg00093.html
	* configure.ac (GNULIB_TEXT_DOMAIN): Define.
	* po/POTFILES.in: Add lib/parse-datetime.y.

	build: update gnulib submodule to latest
	* bootstrap: Update using './bootstrap --bootstrap-sync'.

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

	tests: join: support old perl versions
	The following error was seen on a Debian 6.0 virtual machine using perl
	5.10.1:

	    Bareword found where operator expected at \
	      ./tests/join/join.pl line 327, near "tr/_/-/r"
	    syntax error at ./tests/join/join.pl line 327, near "tr/_/-/r"
	    Execution of ./tests/join/join.pl aborted due to compilation errors.
	    FAIL tests/join/join.pl (exit status: 255)

	* tests/join/join.pl: Don't use the /r modifier which was not introduced
	until perl 5.13.7.

2026-08-23  Collin Funk  <collin.funk1@gmail.com>

	tests: pathchk: test the output to standard error for empty file names
	* tests/misc/pathchk.sh: Move the existing empty file name tests to a
	loop to check some additional options. Check the message printed to
	standard error.

2026-08-21  Collin Funk  <collin.funk1@gmail.com>

	tests: stdbuf: check that a child process isn't created
	* tests/misc/stdbuf.sh: Add a test case.

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

	tests: sort: check LC_ALL and LC_COLLATE
	* tests/sort/sort-locale.sh: Also check LC_COLLATE.

	Link: https://github.com/coreutils/coreutils/pull/269

2026-08-20  oech3  <79379754+oech3@users.noreply.github.com>

	tests: dd: replace LD_PRELOAD of fail-ftruncate-fstat.sh by strace
	* tests/dd/fail-ftruncate-fstat.sh: Replace LD_PRELOAD by strace
	to support static executables.

	Link: https://github.com/coreutils/coreutils/pull/330

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

	tests: stat: check nanosecond precision away from the Epoch
	The existing checks all use a timestamp only 67413 seconds after the
	Epoch, which a double can still represent exactly to the nanosecond, so
	they do not detect a formatter that goes through floating point.  They
	also never look at a timestamp before the Epoch, where the fraction has
	to be truncated towards minus infinity.

	* tests/stat/stat-nanoseconds.sh: Also check %Y, %.Y, %.3Y and %.9Y on a
	2026 timestamp and on a timestamp shortly before the Epoch.
	Link: https://github.com/uutils/coreutils/pull/13976

	Link: https://github.com/coreutils/coreutils/pull/331

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

	maint: avoid -Werror=maybe-uninitialized with gcc -flto -O3
	* src/env.c (main): With GCC 16.1 we need to force initialize
	to avoid the maybe uninitialized warning.

	doc: cut: show how to efficiently search ASCII blanks with -w
	* doc/coreutils.texi (cut invocation): Mention LC_CTYPE=C
	restricts the -w field separator set, and is thus more efficient.

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

	build: fix logname systemd linkage
	Note there was worry about redundant linking with -lsystemd
	when getlogin() is not replaced, however that is mitigated
	in general with the --as-needed linker option (the lib-ignore
	gnulib module). Tested with:

	  ./configure --with-systemd gl_cv_func_getlogin_works=no

	* NEWS: Mention the Build-related fix.
	Reported at https://bugs.debian.org/1129960

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

	tests: prefer unified diffs when printing test failures
	* tests/Coreutils.pm (_compare_files): Use 'diff -u' instead of
	'diff -c'.

	tests: df: check that -k and -m are supported
	* tests/df/df-output.sh: Check that the block size is correct when using
	-k and -m.

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

	tests: improve searchability for fail= logs
	* init.cfg (retry_delay_): Avoid the string "fail="
	as it is very useful to search for that in logs to
	pinpoint the failing part of a test script.

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

	maint: change inappropriate uses of unreachable()
	Change some uses of unreachable() to affirm(false),
	so that we would get an abort in normal builds.
	This is safer than unreachable() which results in undefined behavior.
	See commit v9.8-27-ge661c7a52 for a real case of this.

	Uses of unreachable() should be provably unreachable, and trivially so.
	Trivial cases: e.g. after error(NON_ZERO, ...) etc,
	or a fully handled switch on enum (proved with -Wswitch-enum).

	Note unreachable() can be defined to exit with -funreachable-traps,
	but it's better to use standard build options and distinguish the
	different classes of "unreachable" in code.  Also clang (22) doesn't
	seem to support the -funreachable-traps option.

	Note we prefer affirm to abort, since it has better diagnostics in the
	normal case and better performance with -DNDEBUG.
	and prefer affirm to assert, as it allows for better static
	checking when compiling with -DNDEBUG.
	Neither of these apply to affirm(false),
	but we avoid assert for consistency.

	* gl/lib/mbbuf.h: s/unreachable/affirm(false)/.
	* src/copy-file-data.c: Likewise.
	* src/copy.c: Likewise.
	* src/cut.c: Likewise.
	* src/ls.c: Likewise.
	* src/numfmt.c: Likewise.
	* src/od.c: Likewise.
	* src/stdbuf.c: Likewise.
	* src/sync.c: Likewise.
	* src/tr.c: Likewise.
	* src/tsort.c: Likewise.
	* src/wc.c: Likewise.

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

	build: suppress warnings to add pure or const attributes
	The particular trigger for disabling this now was
	changing copy_debug_string() from using unreachable()
	to assert() will incorrectly induce gcc 16.1 to suggest
	adding __attribute(pure) even though this static function
	may have side effects like aborting the program.
	Note given the current use of copy_debug_string(),
	that would likely be OK to allow common subexpression elimination,
	however "pure" also allows for calls to be removed entirely
	depending on usage of the function (as noted in the bug url below).
	Therefore it's safer to avoid all this until at least
	the compiler bug below is addressed.

	* configure.ac: Remove -Wsuggest-attribute={pure,const}.
	These are currently innacurate and dangerous.
	See https://gcc.gnu.org/PR115237

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

	maint: prefer xreallocarray when reallocating an array
	* src/set-fields.c (set_fields): Prefer xreallocarray which will check
	for unlikely overflows when multiplying the number of elements by the
	size of the element.

	tests: cp: avoid a false failure when built with --disable-xattr
	* tests/cp/capability.sh: Check that --preserve=xattr fails when
	extended attributes cannot be copied. Check that --preserve=all creates
	the copy successfully even if extended attributes cannot be copied.

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

	stdbuf: improve error messages for invalid -i, -o, -e arguments
	This adjusts the error messages to be a bit more descriptive. Here are
	the previous errors:

	  $ LC_ALL=C src/stdbuf-prev -o1a true
	  stdbuf-prev: invalid mode '1a'
	  $ LC_ALL=C src/stdbuf-prev -oa true
	  stdbuf-prev: invalid mode 'a'
	  $ LC_ALL=C src/stdbuf-prev -o1Z true
	  stdbuf-prev: invalid mode '1Z': Value too large for defined data type

	Here are the new errors:

	  $ LC_ALL=C src/stdbuf -o1a true
	  stdbuf: invalid suffix in -o argument '1a'
	  $ LC_ALL=C src/stdbuf -oa true
	  stdbuf: invalid -o argument 'a'
	  $ LC_ALL=C src/stdbuf -o1Z true
	  stdbuf: -o argument '1Z' too large

	* src/stdbuf.c: Include xstrtol-error.h.
	(parse_size): Return the error from xstrtoumax. Prefer ckd_add to check
	for overflow.
	(main): Prefer xstrtol_fatal to a custom error message.

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

	tests: env: fix false failure in recent --env0-from test
	* tests/env/env0-from.sh: Make independent from implicit env vars,
	like __CF_USER_TEXT_ENCODING etc.  Also improve test by,
	making independent of location of env(1) under test, and
	using textual output where possible to ease test debugging.

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

	mv: emit warnings when copying extended attributes fails with ENOTSUP
	* src/copy.c (copy_reg, copy_interal): Don't change the exit status if
	copying extended attributes fails and we are 'mv'.
	* src/copy.h (struct cp_options): Update some commentary.
	* src/mv.c (cp_option_init): Enable require_preserve_xattr in the
	cp_options struct.
	* tests/cp/cp-mv-enotsup-xattr.sh: Check that the error is emitted when
	'mv' is built with extended attribute support.
	* doc/coreutils.texi (mv invocation): Mention that all errors are
	emitted, but do not modify the exit status.
	* NEWS: Mention the bug fix.
	Fixes https://bugs.gnu.org/13601

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

	tests: cp,mv,install: check for data loss with an empty backup suffix
	* tests/misc/empty-backup-suffix.sh: New file.
	* tests/local.mk (all_tests): Add the new test.

2026-08-15  Collin Funk  <collin.funk1@gmail.com>

	maint: prefer inline functions to maros
	These macros evaluate their arguments more than once, so using them
	while incrementing a pointer, for example, would introduce bugs.

	* src/octhexdigits.h (isoct, fromoct, fromhex): Define as an inline
	function instead of a macro.

2026-08-15  Collin Funk  <collin.funk1@gmail.com>

	maint: stdbuf: pacify -Wanalyzer-out-of-bounds
	Analyzer mistakenly reports that the CSWTCH lookup table can overflow
	here since it cannot infer the value of C from the previously called
	switch statement in main. See:
	<https://gcc.gnu.org/bugzilla/PR126885>.

	* src/stdbuf.c (optc_to_fileno): Add a default label with a call to
	unreachable.

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

	tests: printf: remove redunant check
	* tests/printf/printf.sh: We're checking .70000,
	so no point also checkint .1000

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

	env: use argz for NUL delimited parsing
	argz is provided by glibc/gnulib,
	simplifies the code a bit, and is about 15% faster,
	mainly due to strlen() scanning per entry rather
	than per byte scanning:

	  $ src/printf 'USUAL_%1$d=%1$032d\0' $(seq 30000) > env.0
	  $ hyperfine -N 'src/env'{,-argz}' -i --env0-from=env.0 true'

	  src/env-argz -i --env0-from=env.0 true ran
	    1.17 ± 0.27 times faster than src/env -i --env0-from=env.0 true

	* .gitignore: Ignore generated lib/argz.h.
	* bootstrap.conf (gnulib_modules): Add argz.
	* src/env.c: Include <argz.h>.
	(set_envvars_from_file): Use argz_count() and argz_next().
	(set_raw_environment_from_file): Use argz_count() and argz_extract().

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

	env: allow bare --env0-from to round-trip
	Support --env0-from reading any environment generated by -0,
	irrespective of whether -i is specified.

	* src/env.c (set_envvars_from_file): Now that this function
	always builds its own vector, support reading entries
	without an equals, which are just appended to the existing vector.
	* doc/coreutils.texi (env invocation): Adjust accordingly.
	* tests/env/env0-from.sh: Likewise.

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

	env: improve performance of merging environments
	* bootstrap.conf: Reference the hashcode-mem module.
	* src/env.c: Avoid quadratic merging using a hash of vector slots,
	as the combined file entries and existing env entries may be
	significant.  The performance diffence become noticable
	when merging 500 x 500 entries.  Note we keep using system
	interfaces on native windows to retain its case-insensitive behavior.
	* tests/env/env0-from.sh: Add coverage for duplicate and
	nonstandard inherited entries.

	env: implement full round-tripping for -i --env0-from
	* src/env.c: Construct environ directly, preserving order, duplicates,
	empty entries, and entries without =.  Note non -i mode continues
	using system putenv()/unsetenv().
	* doc/coreutils.texi: Adjust acordingly.
	* tests/env/env0-from.sh: Likewise.
	* NEWS: Likewise.

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

	env: support --env0-from to read NUL separated vars from file
	* doc/coreutils.texi (env invocation): Document --env0-from.
	* src/env.c (set_envvars_from_file): A new function to parse
	.*=.*\0 format files and augment the environment with them.
	* tests/env/env0-from.sh: Add a new test.
	* tests/local.mk: Reference new test.
	* NEWS: Mention the new feature.
	* THANKS.in: Add Stefan Klinger, who proposed/discussed the change.

	Link: https://github.com/coreutils/coreutils/issues/324

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

	env,printenv: with --null, avoid CRLF translation on windows
	* NEWS: Mention the improvement.
	* src/env.c (main): With -0, set output to binary mode.
	* src/printenv.c (main): Likewise.

	maint: add syntax check to prefer memeq() over memcmp()==0
	* cfg.mk (sc_prohibit_memcmp): Flag uses of memcmp() ==.
	* src/cut.c (field_delim_overlap): Use memeq().

	tests: numfmt: ensure correct output on Solaris
	* tests/numfmt/numfmt.pl: Add a test case for "%.5119f".
	* NEWS: Mention the bug fix.

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

	build: replace printf, snprintf, and sprintf when needed
	This avoids the "%.5119Lf" issue on Solaris 11
	where an extraneous e+00 is output.
	seq uses printf, while numfmt uses snprintf.
	I.e. this fixes:

	  $ numfmt --to=si --format='%.5119f' 1 | tail -c5
	  $ seq -f %.5119f 1 | tail -c5

	Note gnulib printf module dependencies were previously discussed at:
	https://lists.gnu.org/r/coreutils/2014-11/msg00046.html
	https://github.com/coreutils/coreutils/commit/b817f6276

	* bootstrap.conf: Depend on {printf,snprintf,sprintf}-posix modules.

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

	build: update gnulib submodule to latest
	This fixes an extraneous e+00 output on Solaris with:
	  $ printf '%.5119Lf' 1 | tail -c4

	* gnulib: Update, specifically for commit 9e797dc36b:
	printf: Detect %Lf large precision issue on Solaris

2026-08-14  Iván Ezequiel Rodriguez  <ivanrwcm25@gmail.com>

	truncate: don't hang with --reference=FIFO
	* NEWS: Mention the fix.
	* src/truncate.c (main): Open the reference with O_NONBLOCK.
	* tests/truncate/truncate-fifo.sh: Also cover --reference=FIFO.

2026-08-12  Arun Bhattacharya  <arun0a_in@hotmail.com>

	uname: add -A,--all-labeled to print labeled lines
	* doc/coreutils.texi (uname invocation): Describe -A,--all-labeled.
	* src/uname.c (main): Accept new option.
	(print_element): Also output label if enabled.
	* tests/misc/uname-labeled.sh: Add a new test.
	* tests/local.mk: Reference the new test.
	* NEWS: Mention the new feature.

	Link: https://github.com/coreutils/coreutils/issues/313

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

	tests: numfmt: add checks for overflowing unit sizes
	* tests/numfmt/numfmt.pl (@Tests): Add unit-11 and unit-12, ensuring
	a --to-unit/--from-unit whose suffix multiplication overflows
	uintmax_t is rejected with "invalid unit size" rather than
	being wrapped or crashing.

	Link: https://github.com/uutils/coreutils/pull/13484

	Link: https://github.com/coreutils/coreutils/pull/326

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

	tests: printf,seq: add checks for large field widths and precisions
	* tests/printf/printf.sh: Ensure a large field width or precision
	produces fully padded output, and that a precision beyond 1000
