2021-09-24  Pádraig Brady  <P@draigBrady.com>

	version 9.0
	* NEWS: Record release date.

	tests: sparse-perf: avoid false failure
	* tests/cp/sparse-perf.sh: Avoid the case where
	we saw SEEK_DATA take 35s to return a result
	against a 1TB sparse file.  This happened on
	a FreeBSD 9.1 VM at least.
	Reported by Nelson H. F. Beebe.

	cksum: fix -a crc on 64 bit big endian systems
	* src/cksum.c (crc_sum_stream): On sparc64 for example,
	a crc of 0 was printed due to mismatch in size of
	variable copied between generator and output functions.
	uint_fast32_t is generally 64 bits on 64 bit systems,
	so we copy through an int to ensure we don't use the wrong
	end of a 64 bit variable.
	Reported by Nelson H. F. Beebe

2021-09-21  Pádraig Brady  <P@draigBrady.com>

	tail: fix detection of closed stdout on macOS
	* bootstrap.conf: We only need poll on Linux and AIX
	where poll is not replaced.  Also resinstate dependence
	on select so we can use it unconditionally.
	* src/tail.c (check_output_alive): Reinstate use of select()
	by default as poll was seen to be ineffective for this
	application on macOS.
	Fixes https://bugs.gnu.org/50714

	maint: clean up c++ style comments
	* src/expand-common.h: Remove commented variables.
	* src/remove.h: Change to C style comment.
	* src/tail.c: Likewise.

2021-09-20  Pádraig Brady  <P@draigBrady.com>

	tests: date-debug: avoid a false failure on solaris
	* tests/misc/date-debug.sh: Use a dynamic time format,
	as the C locale on solaris uses %T rather than %H:%M:%S
	for the time component.

2021-09-20  Jim Meyering  <meyering@fb.com>

	doc: drop extraneous single quotes in help
	* src/digest.c (usage) [cksum --help]: Drop single quotes
	around each checksum name.
	* src/tee.c (usage) [tee --help]: Likewise.

	cksum: list Pádraig as coauthor
	* src/digest.c (AUTHORS) [HASH_ALGO_CKSUM]: Add Pádraig as
	cksum coauthor.
	* AUTHORS: Likewise.

	tests: env-s.pl: avoid spurious failure on OS X
	* tests/misc/env-S.pl: The __CF_USER_TEXT_ENCODING envvar
	would cause many of these sub-tests to fail. Ignore it.

2021-09-20  Pádraig Brady  <P@draigBrady.com>

	build: update gnulib submodule to latest
	* gnulib: Update to latest.
	Fixes "extern inline" and "rpl_free" issues.

	doc: fix --help formatting for checksum utils
	* src/digest.c (usage): Indicate that --length and --algorithm
	require arguments.  Emit corresponding emit_mandatory_arg_note().
	Use consistent alignment.

	cksum: support more transparent emulation of older utils
	* src/digest.c: Allow using the --untagged option with --check,
	so that `cksum -a md5 --untagged` used to emulate md5sum for example,
	may be augmented with the --check option.  Also support the --tag
	option with cksum, to allow overriding a previous --untagged setting.
	* doc/coreutils.texi: Adjust accordingly.
	* tests/misc/cksum-a.sh: Likewise.

	tests: avoid rare race in tail-2/F-vs-rename.sh
	* tests/tail-2/F-vs-rename.sh: Keep stdout and stderr separate,
	so that interspersion doesn't impact regex checks.  Also wait
	for each file's data to be printed to avoid multiple writes
	to a file to be printed in a single iteration, which would
	impact the regex checks.  Also we refactor the check function,
	rather than repeatedly redefining variations.

2021-09-17  Pádraig Brady  <P@draigBrady.com>

	maint: remove duplicate from THANKS.in
	* THANKS.in: Now that Tianjia Zhang has a commit in the repo.

2021-09-17  Tianjia Zhang  <tianjia.zhang@linux.alibaba.com>

	tests: fix typo in cksum-a.sh
	* tests/misc/cksum-a.sh: fix typo md5um to md5sum.

2021-09-17  Pádraig Brady  <P@draigBrady.com>

	tests: fix rare false failure in tail-2/F-vs-rename
	This is wrong fix really, as only introducing delay I think.

	* tests/tail-2/F-vs-rename.sh: Avoid a rare false failure
	due to a race in the test.  Now wait until tail has noticed
	that b is replaced before writing to a, so that the subsequent
	write of "y" to b will be displayed independently from
	current contents of b ("x").

2021-09-17  Pádraig Brady  <P@draigBrady.com>

	tests: port removed-directory test to FreeBSD
	* tests/ls/removed-directory.sh: On FreeBSD 9.1 at least,
	one gets ENOENT when trying to traverse the current removed dir
	with ../, so instead reference the parent dir directly.

2021-09-16  Pádraig Brady  <P@draigBrady.com>

	rmdir: fix uninitialized memory causing incorrect error
	* src/rmdir.c (main): Only inspect the returned stat structure,
	when stat(2) returns success.

2021-09-16  Jim Meyering  <meyering@fb.com>

	build: avoid new chmod.c warnings from upcoming GCC12
	Here are the warnings:
	src/chmod.c:175:3: error: 'ch.new_mode' may be used uninitialized in\
	    this function [-Werror=maybe-uninitialized]
	  175 |   strmode (ch->new_mode, perms);
	src/chmod.c:178:3: error: 'ch.old_mode' may be used uninitialized in\
	    this function [-Werror=maybe-uninitialized]
	  178 |   strmode (ch->old_mode, old_perms);

	* src/chmod.c (process_file): Initialize ch.  Its new_mode and
	old_mode fields could indeed be used uninitialized to form mode
	strings, but those are used only when built from initialized members.

2021-09-16  Pádraig Brady  <P@draigBrady.com>

	digest: ignore empty lines when checking
	* src/digest.c (digest_check): Treat empty lines like comments,
	as commented checksum files very often have empty lines.
	* tests/misc/md5sum.pl: Adjust accordingly.

	factor: sync longlong.h adjustments from upstream
	* src/longlong.h: Sync changes from:
	https://gmplib.org/repo/gmp/log/tip/longlong.h

	stat,tail: add support for the secretmem file system
	* src/stat.c (human_fstype): Add case for the 'secretmem'
	file system type.
	* NEWS: Mention the Improvement.

	maint: sync help2man to latest version
	* man/help2man: sync to changes from version 1.48.5.
	Note this doesn't materially change the generated man pages.

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

	tests: ensure returns_ check failures are propagated
	* tests/misc/cksum-a.sh: Set fail=1 if returns_ check fails.
	* tests/misc/sync.sh: Likewise.
	* tests/misc/yes.sh: Likewise.

	cksum: fix --check with non tagged format checksums
	* src/digest.c: Always set the digest_length, so that
	we check the correct number of hex digits when parsing
	non tagged format checksums.
	* tests/misc/cksum-a.sh: Add a test case.  Also fix
	up this test which was ineffective due to fail=1
	being set in a subshell and ignored.

2021-09-16  Paul Eggert  <eggert@cs.ucla.edu>

	cksum: fix off-by-1 bug with \r stripping
	Problem reported by Jim Meyering (Bug#50611).
	* src/digest.c (digest_check): When stripping trailing \r,
	avoid subscript error before start of line.

2021-09-15  Paul Eggert  <eggert@cs.ucla.edu>

	maint: prefer rawmemchr to memchr when easy
	* bootstrap.conf (gnulib_modules): Add rawmemchr.
	* src/csplit.c: Include idx.h.
	* src/csplit.c (record_line_starts):
	* src/head.c (elide_tail_lines_pipe):
	* src/shuf.c (next_line):
	* src/split.c (lines_split):
	* src/tail.c (pipe_lines):
	* src/wc.c (wc_lines):
	Prefer rawmemchr to memchr when rawmemchr is easy.
	* src/csplit.c (load_buffer):
	* src/head.c (struct linebuffer):
	Make room for a 1-byte sentinel.

	split: avoid NULL + 1
	* src/split.c (lines_chunk_split): Don’t add to a null pointer.
	It’s undefined behavior, and it’s unnecessarily confusing
	regardless.

2021-09-15  Pádraig Brady  <P@draigBrady.com>

	digest: support windows format checksum files
	Support checksum files with CRLF line endings,
	which is a common gotcha for using --check on windows,
	or with checksum files generated on windows.
	Note we escape \r here to support the original coreutils format
	(with file name at EOL), and file names with literal
	\r characters as the last character of their name.

	* src/digest.c (filename_unescape): Convert \\r -> \r.
	(print_filename): Escape \r -> \\r.
	(output_file): Detect \r chars in file names.
	(digest_check): Ignore literal \r char at EOL.
	* tests/misc/md5sum.pl: Add a test case.
	* tests/misc/sha1sum.pl: Likewise.
	* NEWS: Mention the improvement.

2021-09-15  Pádraig Brady  <P@draigBrady.com>

	doc: improve --help indenting in checksum utils
	* src/digest.c (usage): Indent multi-line descriptions for clarity.

2021-09-15  Pádraig Brady  <P@draigBrady.com>

	cksum: operate in binary mode only
	This only practically matters on windows.
	But given there are separate text handling options in cygwin,
	keep the interface simple, and avoid exposing the
	confusing binary/text difference here.

	* doc/coreutils.texi (md5sum invocation): Mention that
	--binary and --text are not supported by the cksum command.
	* src/digest.c: Set flag to use binary mode by default.
	(output_file): Don't distinguish text and binary modes with
	' ' and '*', and just use ' ' always.

2021-09-15  Pádraig Brady  <P@draigBrady.com>

	cksum: use --tag format by default
	This format is a better default, since it results in simpler usage,
	as you don't need to specify --tag on generation or -a on
	checking invocations.  Also it's a more general format supporting
	mixed and length adjusted digests.

	* doc/coreutils.texi (cksum invocation): Document a new --untagged
	option, to use the older coreutils format.
	(md5sum invocation): Mention that cksum doesn't support --tag.
	* src/digest.c: Adjust cksum(1) to default to --tag,
	and accept the new --untagged option.
	* tests/misc/b2sum.sh: Adjust accordingly.
	* tests/misc/cksum-a.sh: Likewise.
	* tests/misc/cksum-c.sh: Likewise.

2021-09-15  Pádraig Brady  <P@draigBrady.com>

	cksum: support --zero in default mode
	* src/cksum.h: Thread DELIM through the output functions.
	* src/digest.c: Likewise.
	* src/sum.c: Likewise.
	* src/sum.h: Likewise.
	* src/cksum.c: Likewise. Also adjust check to allow -z
	with traditional output modes.  Also ajust the global variable
	name to avoid shadowing warnings.
	* tests/misc/cksum-a.sh: Adjust accordingly.

2021-09-15  Pádraig Brady  <P@draigBrady.com>

	digest: support -length specifiers on all digest tags
	This will be generally useful going forward, for sha3-256 etc.

	* src/digest.c: Rename b2_length to digest_length, and
	adjust/simplify the code to operate on this for both
	b2sum and cksum -a blake2b.

2021-09-15  Pádraig Brady  <P@draigBrady.com>

	cksum: support digest detection for tagged format
	Support `cksum --check FILE` without having to specify a digest
	algorithm, allowing for more generic file check instructions.
	This also supports mixed digest checksum files, supporting
	more robust multi digest checks.

	* src/digest.c (algorithm_from_tag): A new function to
	identify the digest algorithm from a tagged format line.
	(split3): Set the algorithm depending on tag, and update
	the expected digest length accordingly.
	* tests/misc/cksum-c.sh: Add a new test.
	* tests/local.mk: Reference the new test.
	* tests/misc/md5sum.pl: Adjust to more generic error.
	* tests/misc/sha1sum.pl: Likewise.
	* doc/coreutils.texi (md5sum invocation): Mention the new -c feature.
	* NEWS: Mention the new feature.

2021-09-15  Pádraig Brady  <P@draigBrady.com>

	maint: simplify b2sum to only handle BLAKE2b
	Any further variants will use the cksum -a table driven mechanism.

	* src/digest.c: Remove BLAKE2 specific table driven code.

2021-09-15  Pádraig Brady  <P@draigBrady.com>

	digest: add support for sm3
	Add message digest sm3, which uses the OSCCA SM3 secure
	hash (OSCCA GM/T 0004-2012 SM3) generic hash transformation.

	* bootstrap.conf: Add the sm3 module.
	* doc/coreutils.texi: Mention the cksum -a option.
	* src/digest.c: Provide support for --algorithm='sm3'.
	* tests/misc/sm3sum.pl: Add a new test (from Tianjia Zhang)
	* tests/local.mk: Reference the new test.
	* NEWS: Mention the new feature.

	Tested-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com>

2021-09-15  Pádraig Brady  <P@draigBrady.com>

	cksum: add --algorithm option to select digest mode
	* src/digest.c: Organize HASH_ALGO_CKSUM to be table driven,
	and amalgamate all digest algorithms.
	(main): Parse all options if HASH_ALGO_CKSUM, and disallow
	--tag, --zero, and --check with the traditional bsd, sysv, and crc
	checksums for now.
	* src/local.mk: Reorganize to include all digest modules in cksum.
	* tests/misc/cksum-a.sh: Add a new test.
	* tests/misc/b2sum.sh: Update to default to checking with cksum,
	as b2sum's implementation diverges a bit from the others.
	* tests/local.mk: Reference the new test.
	* doc/coreutils.texi (cksum invocation): Adjust the summary to
	identify the new mode, and document the new --algorithm option.
	* man/cksum.x: Adjust description to be more general.
	* man/*sum.x: Add [See Also] section referencing cksum(1).
	* NEWS: Mention the new feature.

	digest: refactor cksum(1) into digest.c
	* cfg.mk: Adjust cksum.c to not require config.h
	and support a main (for crctab) without calling bindtextdomain().
	* po/POTFILES.in: Remove cksum_pclmul.c since it no longer
	concerns itself with diagnostics.
	* src/cksum.c: Refactor to just providing stream digest,
	and digest printing functionality.
	* src/cksum.h: Adjust to the new interface.
	* src/cksum_pclmul.c: Remove diagnostics, and determine errors
	internally.
	* src/crctab.c: Separate from cksum.h since that's now included
	multiple times.
	* src/digest.c: Provide cksum(1) functionality if -DHASH_ALGO_CKSUM
	* src/local.mk: Adjust to new crctab.c and HASH_ALGO_CKSUM define.

2021-09-15  Pádraig Brady  <P@draigBrady.com>

	cksum: document the --debug option
	This should have been part of commit v8.32-113-gb73b9fcb1

	* doc/coreutils.texi (cksum invocation): Add the --debug description.
	* src/cksum.c (usage): Likewise.
	(main): Also give explicit indication when using generic hardware.

2021-09-15  Pádraig Brady  <P@draigBrady.com>

	sum: handle EOVERFLOW for too large inputs
	* src/sum.c (bsd_sum_stream): Detect overflow when updating length.
	(sysv_sum_stream): Likewise.

2021-09-15  Pádraig Brady  <P@draigBrady.com>

	digest: refactor sum(1) into digest.c
	Since digest will be providing all digest functionality,
	refactor sum.c into it.

	* po/POTFILES.in: sum.c no longer has translatable strings so remove.
	* src/digest.c: Call out to new stream interfaces in sum.c
	* src/local.mk: Adjust sources for the sum binary.
	* src/sum.c: Provide a stream interface for BSD and SYSV digests.
	* src/sum.h: A new file to declare the exported functions in sum.c

2021-09-15  Pádraig Brady  <P@draigBrady.com>

	digest: add LENGTH parameter to digest to support cksum
	* src/digest.c (digest_file): Add a LENGTH param,
	to support cksum(1), and sum(1) which output the
	length as part of their output.

2021-09-15  Pádraig Brady  <P@draigBrady.com>

	maint: rename md5sum.c to more general digest.c
	md5sum.c will be the base for all digest functions,
	so rename accordingly.

	* src/md5sum.c: Rename to ...
	* src/digest.c: ... renamed from md5sum.c
	* scripts/git-hooks/commit-msg: Allow digest: commit prefix.
	* po.POTFILES.in: Adjust to new name.
	* src/local.mk: Likewise.

2021-09-15  Pádraig Brady  <P@draigBrady.com>

	doc: fix ambiguities in logname(1) and whoami(1)
	* doc/coreutils.texi (whoami invocation): Clarify it prints names,
	not numeric IDs.
	* man/whoami.x: Likewise.
	* man/logname.x: Reference getlogin(3).
	* src/logname.c: Clarify that it prints the login name,
	rather than the name of the effective user ID.

	Fixes https://bugs.gnu.org/48894

2021-09-15  nl6720  <nl6720@gmail.com>

	dircolors: add *direct* to TERM matching
	Search for "direct color" at:
	https://invisible-island.net/xterm/terminfo.html

	* src/dircolors.hin: Add *direct* to match terminals that
	support direct colors (24-bit color / TrueColor).
	The trailing * will match entries like xterm-direct2.

	Addresses https://bugs.gnu.org/39827

2021-09-12  Pádraig Brady  <P@draigBrady.com>

	tests: stat-vs-dirent.sh: avoid a false failure
	* tests/ls/stat-vs-dirent.sh: Skip the test if we can't stat(1),
	as the file may have been removed, or have a malformed name
	due to '\n' etc. in the file name.

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

	tests: add new stdin reading programs to tty-eof test
	* tests/misc/tty-eof.pl: Add b2sum and basenc.

	build: update gnulib submodule to latest
	* gnulib: Update to latest. This fixes a gnulib test failure in base64,
	among other fixes.
	* cfg.mk: Disable sc_indent as auto indent is too invasive for now.

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

	doc: fix repeated word
	A proposed change to gnulib's sc_prohibit_doubled_word
	was made to detect this in future.

	* README: s/can can/can/.
	Fixes https://bugs.gnu.org/50484

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

	doc: can “can can”
	Problem reported by Akbarkhon Variskhanov (Bug#50484).

2021-09-08  Paul Eggert  <eggert@cs.ucla.edu>

	doc: add missing "as" (thanks to Nelson H.F. Beebe)

2021-09-05  Justin Tracey  <j2tracey@gmail.com>

	tests: narrow scope of faulty join args
	* tests/misc/join.pl: Only test invalid-j with an invalid -j field,
	not with missing operands as well.

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

	doc: indicate the default algorithm in the sum(1) man page
	* src/sum.c (usage): Indicate that -r (BSD algorithm) is the default.

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

	sum: always output a file name if one passed
	Adjust to output the file name if any name parameter is passed.
	This is consistent with sum -s, cksum, and sum implementations
	on other platforms.  This should not cause significant compat
	issues, as multiple fields are already output, and so already
	need to be parsed.

	* src/sum.c (bsd_sum_file): Output the file name
	if any name parameter is passed.
	* tests/misc/sum.pl: Adjust accordingly.
	* doc/coreutils.texi (sum invocation): Likewise.
	* NEWS: Mention the change in behavior.

2021-08-31  Paul Eggert  <eggert@cs.ucla.edu>

	tests: port better to NetBSD
	* tests/misc/help-version.sh: Test that /dev/full causes
	shell printf to fail.  This ports better to NetBSD 9.88.46,
	where it doesn’t.  Problem reported by Nelson H. F. Beebe.

	tests: merge help-version changes back from gzip
	* tests/misc/help-version.sh: Merge gzip-related changes
	back from gzip/tests/help-version.  This fixes problems
	when TERM is not 'dumb', and should simplify maintenance.

2021-08-30  Assaf Gordon  <assafgordon@gmail.com>

	basenc: fix bug49741: using wrong decoding buffer length
	Emil Lundberg <lundberg.emil@gmail.com> reports in
	https://bugs.gnu.org/49741 about a 'basenc --base64 -d' decoding bug.
	The input buffer length was not divisible by 3, resulting in
	decoding errors.

	* NEWS: Mention fix.
	* src/basenc.c (DEC_BLOCKSIZE): Change from 1024*5 to 4200 (35*3*5*8)
	which is divisible by 3,4,5,8 - satisfying both base32 and base64;
	Use compile-time verify() macro to enforce the above.
	* tests/misc/basenc.pl: Add test.

2021-08-28  Paul Eggert  <eggert@cs.ucla.edu>

	basenc: prefer signed to unsigned integers
	This patch modifies basenc to prefer signed integers to
	unsigned, as signed are less error-prone.
	This patch also updates Gnulib to to latest, which updates Gnulib’s
	base32 and base64 modules to prefer signed to unsigned integers.
	* src/basenc.c: Include idx.h.
	(struct base2_decode_context): Use unsigned char, not unsigned
	for an octet that must fit in an unsigned char.
	(base_encode, struct base_decode_context)
	(base64_decode_ctx_wrapper, prepare_inbuf, base64url_encode)
	(base64url_decode_ctx_wrapper, base32_decode_ctx_wrapper)
	(base32hex_encode, base32hex_decode_ctx_wrapper, base16_encode)
	(base16_decode_ctx, z85_encode, Z85_HI_CTX_TO_32BIT_VAL)
	(z85_decoding, z85_decode_ctx, base2msbf_encode)
	(base2lsbf_encode, base2lsbf_decode_ctx, base2msbf_decode_ctx)
	(wrap_write, do_encode, do_decode, main):
	Prefer signed integers to unsigned.
	(main): Treat extremely large wrap columns as if they were
	infinite; that’s good enough.  Since we’re now using xstrtoimax,
	this allows ‘-w -0’ (same as ‘-w 0’).
	* tests/misc/base64.pl (gen_tests): -w-0 is no longer an error.

2021-08-25  Jim Meyering  <meyering@fb.com>

	maint: avoid new syntax-check failure
	find-mount-point.h rightly includes <stdlib.h> for its use
	of _GL_ATTRIBUTE_DEALLOC_FREE, which uses free, yet that new
	inclusion provoked a syntax-check failure. Exempt this header
	file as we've done for others.
	* cfg.mk (exclude_file_name_regexp--sc_system_h_headers):
	Add find-mount-point.h to the regexp.
	(sc_system_h_headers): Use grep -E, for a more readable regexp.

2021-08-25  Pádraig Brady  <P@draigBrady.com>

	tests: avoid reflinks when testing SEEK_DATA logic
	This better tests the SEEK_HOLE logic which
	replaced the original fiemap hole identification logic.
	Also it avoids a false failure in sparse-2.sh
	on reflink supporting file systems, where we
	try to correlate the file sizes produced by cp and dd.

	* tests/cp/sparse-2.sh: s/cp/cp --reflink=never/
	* tests/cp/sparse-extents-2.sh: Likewise.
	* tests/cp/sparse-extents.sh: Likewise.
	* tests/cp/sparse-perf.sh: Likewise.
	* tests/cp/sparse.sh: Likewise.

	Fixes https://github.com/coreutils/coreutils/issues/54

2021-08-22  Paul Eggert  <eggert@cs.ucla.edu>

	df: pacify -Wsuggest-attribute=malloc
	Problem found with latest Gnulib and GCC 11.2.1.
	* src/find-mount-point.h (find_mount_point):
	Add _GL_ATTRIBUTE_MALLOC and _GL_ATTRIBUTE_DEALLOC_FREE.

	build: update gnulib submodule to latest

	maint: use clearerr on stdin when appropriate
	This is so that commands like ‘fmt - -’ read from stdin
	both times, even when it is a tty.  Fix some other minor
	issues that are related.
	* src/blake2/b2sum.c (main):
	* src/cksum.c (cksum):
	* src/cut.c (cut_file):
	* src/expand-common.c (next_file):
	* src/fmt.c (fmt):
	* src/fold.c (fold_file):
	* src/md5sum.c (digest_file, digest_check):
	* src/nl.c (nl_file):
	* src/od.c (check_and_close):
	* src/paste.c (paste_parallel, paste_serial):
	* src/pr.c (close_file):
	* src/sum.c (bsd_sum_file):
	Use clearerr on stdin so that stdin can be read multiple times
	even if it is a tty.  Do not assume that ferror preserves errno as
	POSIX does not guarantee this.  Coalesce duplicate diagnostic
	calls.
	* src/blake2/b2sum.c (main):
	* src/fmt.c (main, fmt):
	Report read error, even if it's merely fclose failure.
	* src/fmt.c: Include die.h.
	(fmt): New arg FILE.  Close input (reporting error) if not stdin.
	All callers changed.
	* src/ptx.c (swallow_file_in_memory): Clear stdin's EOF flag.
	* src/sort.c (xfclose): Remove unnecessary feof call.

	doc: spell out stdin, stdout, stderr
	* doc/coreutils.texi: Spell out words like “stdin” in
	English prose.

2021-08-16  Paul Eggert  <eggert@cs.ucla.edu>

	chmod: fix use of uninitialized var if -v
	Problem reported by Michael Debertol (Bug#50070).
	* NEWS: Mention the fix.
	* src/chmod.c (struct change_status): New struct, replacing the
	old enum Change_status.  All uses changed.
	(describe_change): Distinguish between cases depending on
	whether 'stat' or its equivalent succeeded.  Report a line
	of output even if 'stat' failed, as that matches the documentation.
	Rework to avoid casts.
	(process_file): Do not output nonsense modes computed from
	uninitialized storage, removing a couple of IF_LINTs.  Simplify by
	defaulting to CH_NO_STAT.

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

	maint: update .gitignore
	* .gitignore: ignore new lib/malloc gnulib directory.

	maint: allow hook script accept "Signed-off-by:"
	* scripts/git-hooks/commit-msg: Relax this constraint.

2021-08-11  Paul Eggert  <eggert@cs.ucla.edu>

	df: fix bug with automounted
	If the command-line argument is automounted, df would use
	stat info that became wrong after the following open.
	* NEWS: Mention the fix (bug#50012).
	* src/df.c (automount_stat_err): New function.
	This fixes the hang on fifos in a better way, by using O_NONBLOCK.
	(main): Use it.

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

	cat: with -E fix handling of \r\n spanning buffers
	We must delay handling when \r is the last character
	of the buffer being processed, as the next character
	may or may not be \n.

	* src/cat.c (pending_cr): A new global to record whether
	the last character processed (in -E mode) is '\r'.
	(cat): Honor pending_cr when processing the start of the buffer.
	(main): Honor pending_cr if no more files to process.
	* tests/misc/cat-E.sh: Add test cases.
	Fixes https://bugs.gnu.org/49925

2021-07-31  Paul Eggert  <eggert@cs.ucla.edu>

	maint: update .gitignore

	build: update gnulib submodule to latest

	uniq: pacify GCC -fanalyzer
	Pacify GCC 11.1 -fanalyzer.
	* src/uniq.c (check_file): Use simpler test to check whether this
	is the first time through the loop.  Although the old test was
	correct, the new one is easier to understand and perhaps a tiny
	bit more efficient.

	numfmt: omit unnecessary pointer test
	Caught by GCC 11.1 -fanalyzer.
	* src/numfmt.c (simple_strtod_int): Remove unnecessary test of
	*endptr vs NULL.  Presumably this was a typo and **endptr was
	intended instead of *endptr, but an **endptr test is also
	unnecessary since c_isdigit (0) returns false.

2021-07-29  Pádraig Brady  <P@draigBrady.com>

	doc: add options summary list to tr texinfo
	* doc/coreutils.texi (tr invocation): Provide a summary
	list of the available options, which is useful to
	provide a quick reminder for those already familiar
	with the functionality of tr.
	Fixes https://bugs.gnu.org/49764

2021-07-28  Pádraig Brady  <P@draigBrady.com>

	tests: augment new ls --zero test cases
	* tests/ls/zero-option.sh: Check for the disabled, disallowed,
	and allowed option combinations.

	maint: avoid syntax-check failures in recent ls changes
	* src/ls.c: Fix ifdef indenting and long line.

2021-07-28  Paul Eggert  <eggert@cs.ucla.edu>

	doc: modernize usage of “disk” and “core”
	In documentation and comments, don’t assume that secondary storage
	devices are disk devices.  Similarly, don’t assume that main memory
	uses magnetic cores, which became obsolete in the 1970s.
	* src/du.c (usage):
	* src/ls.c (usage):
	* src/shred.c (usage): Reword to avoid “disk” in usage messages.

	doc: improve ls documentation
	* doc/coreutils.texi (ls invocation): Document implementation more
	closely.  Be more consistent about style.  Omit some needless words.
	* src/ls.c (usage): Don’t overdocument -f, as the details were wrong.
	Omit -1 advice as it’s a bit obsolete now that we have --zero and
	is a bit much for --usage output anyway.

	ls: rename --null to --zero (Bug#49716)
	* NEWS, doc/coreutils.texi (General output formatting):
	* src/ls.c (usage):
	Document this.
	* src/ls.c (ZERO_OPTION): Rename from NULL_OPTION.
	All uses changed.
	(long_options): Rename --null to --zero.
	(dired_dump_obstack, main, print_dir): Use '\n' instead of
	eolbyte where eolbyte must equal '\n'.
	(decode_switches): Decode --zero instead of --null.
	--zero also implies -1, -N, --color=none, --show-control-chars.
	Use easier-to-decipher code to set ‘format’ and ‘dired’.
	Reject attempts to combine --dired and --zero.
	* tests/local.mk: Adjust to test script renaming.
	* tests/ls/zero-option.sh: Rename from tests/ls/null-option.sh,
	and test --zero instead of --null.

	ls: compute defaults more lazily
	* src/ls.c (enum time_type, enum sort_type, enum indicator_style)
	(enum Dereference_symlink, ignore_mode):
	Put ‘= 0’ after default values, since the code relies
	on static storage defaulting to zero.
	(enum sort_type): Reorder so that -1 can be used to represent unset.
	(main): Test print_with_color after parse_ls_color may have reset it.
	(decode_line_length): Return the line length instead of setting
	static storage.  All uses changed.  Treat line lengths exceeding
	PTRDIFF_MAX as infinite, to avoid pointer-subtraction glitches.
	(stdout_isatty): New function, to avoid calling isatty twice.
	(decode_switches): Calculate defaults more lazily, to avoid using
	syscalls or getenv during startup unless the results are more
	likely to be needed.  Use -1 to indicate options that haven’t been
	set on the command line yet.  Move print_with_color test from
	here to ‘main’.  Suppress bogus GCC warning.
	(getenv_quoting_style): Return the quoting style instead of
	setting static storage.
	(init_column_info): New arg MAX_COLS, to avoid recalculating it.
	Caller changed.

2021-07-26  Pádraig Brady  <P@draigBrady.com>

	maint: avoid recent syntax-check issues
	* .gitignore: Cater for recently added poll module.
	* src/stdbuf.c: Avoid false positive from sc_prohibit_readlink.

2021-07-26  Paul Eggert  <eggert@cs.ucla.edu>

	ls: add --null option (Bug#49716)
	* NEWS, doc/coreutils.texi (General output formatting):
	* src/ls.c (usage): Document this.
	* src/ls.c (NULL_OPTION): New constant.
	(long_options): Add --null.
	(eolbyte): New static var.
	(dired_dump_obstack, main, print_dir, print_current_files)
	(print_many_per_line, print_horizontal, print_with_separator):
	Output eolbyte instead of '\n'.
	(decode_switches): Decode --null.
	* tests/ls/null-option.sh: New file.
	* tests/local.mk (all_tests): Add it.

	ls: port to wider off_t, uid_t, gid_t
	* src/ls.c (dired_pos): Now off_t, not size_t, since it counts
	output file offsets.
	(dired_dump_obstack): This obstack's file offsets are now
	off_t, not size_t.
	(format_user_or_group, format_user_or_group_width):
	ID arg is now uintmax_t, not unsigned long, since uid_t and
	gid_t values might exceed ULONG_MAX.
	(format_user_or_group_width): Use snprintf with NULL instead of
	sprintf with a discarded buffer.  This avoids a stack buffer,
	and so should be safer.

	ls: demacroize
	Prefer functions or constants to macros where either will do.
	That’s cleaner, and nowadays there’s no performance reason to
	prefer macros.  All uses changed.
	* src/ls.c (INITIAL_TABLE_SIZE, MIN_COLUMN_WIDTH):
	Now constants instead of macros.
	(file_or_link_mode): New function, replacing the old macro
	FILE_OR_LINK_MODE.
	(dired_outbyte): New function, replacing the old macro DIRED_PUTCHAR.
	(dired_outbuf): New function, replacing the old macro DIRED_FPUTS.
	(dired_outstring): New function, replacing the old macro
	DIRED_FPUTS_LITERAL.
	(dired_indent): New function, replacing the old macro DIRED_INDENT.
	(push_current_dired_pos): New function, replacing the old macro
	PUSH_CURRENT_DIRED_POS.
	(assert_matching_dev_ino): New function, replacing the old macro
	ASSERT_MATCHING_DEV_INO.
	(do_stat, do_lstat, stat_for_mode, stat_for_ino, fstat_for_ino)
	(signal_init, signal_restore, cmp_ctime, cmp_mtime, cmp_atime)
	(cmp_btime, cmp_size, cmp_name, cmp_extension)
	(fileinfo_name_width, cmp_width, cmp_version):
	No longer inline; compilers can deduce this well enough nowadays.
	(main): Protect unused assert with ‘if (false)’ rather than
	commenting it out, so that the compiler checks the code.
	(print_dir): Output the space and newline in the same buffer
	as the human-readable number they surround.
	(dirfirst_check): New function, replacing the old macro
	DIRFIRST_CHECK.  Simplify by using subtraction.
	(off_cmp): New function, replacing the old macro longdiff.
	(print_long_format): No need to null-terminate the string now.
	(format_user_or_group): Let printf count the bytes.

	ls: simplify sprintf usage
	* src/ls.c (format_user_or_group_width, print_long_format):
	Use return value from sprintf instead of calling strlen on
	the resulting buffer, or inferring the length some other way.

	build: update gnulib submodule to latest

	maint: fix white space

	env: fix usage typo
	* src/env.c (usage): Fix pluralization typo.

2021-07-02  Kamil Dudka  <kdudka@redhat.com>

	df: fix duplicated remote entries due to bind mounts
	As originally reported in <https://bugzilla.redhat.com/1962515>,
	df invoked without -a printed duplicated entries for NFS mounts
	of bind mounts.  This is a regression from commit v8.25-54-g1c17f61ef99,
	which introduced the use of a hash table.

	The proposed patch makes sure that the devlist entry seen the last time
	is used for comparison when eliminating duplicated mount entries.  This
	way it worked before introducing the hash table.

	Patch co-authored by Roberto Bergantinos.

	* src/ls.c (struct devlist): Introduce the seen_last pointer.
	(devlist_for_dev): Return the devlist entry seen the last time if found.
	(filter_mount_list): Remember the devlist entry seen the last time for
	each hashed item.
	* NEWS: Mention the bug fix.
	Fixes https://bugs.gnu.org/49298

2021-06-27  Paul Eggert  <eggert@cs.ucla.edu>

	tail: use poll, not select
	This fixes an unlikely stack out-of-bounds write reported by
	Stepan Broz via Kamil Dudka (Bug#49209).
	* bootstrap.conf (gnulib_modules): Replace select with poll.
	* src/tail.c: Do not include <sys/select.h>.
	[!_AIX]: Include poll.h.
	(check_output_alive) [!_AIX]: Use poll instead of select.
	(tail_forever_inotify): Likewise.  Simplify logic, as there is no
	need for a ‘while (len <= evbuf_off)’ loop.

	tail: fix abuse2 test race
	* tests/tail-2/inotify-hash-abuse2.sh (fastpoll):
	Fix race where tailed file ‘f’ temporarily did not exist.

	maint: while (1) → while (true)

2021-06-21  Nikolay Nechaev  <Nikolay_Nechaev@mail.ru>

	maint: remove redundant checks on buffer sizes in tail
	* src/tail.c: remove redundant size checks before calls to
	`xwrite_stdout`

2021-06-21  Pádraig Brady  <P@draigBrady.com>

	stat: use decomposed decimal device numbers by default
	* src/stat.c (default_format): Use decomposed decimal
	representation (major,minor) in the default format.
	This is least ambiguous for human interpretation,
	and more consistent with ls for example.
	Fixes https://bugs.gnu.org/48960

2021-06-21  Pádraig Brady  <P@draigBrady.com>

	stat: support more device number representations
	In preparation for changing the default device number
	representation (to decomposed decimal), provide more
	formatting options for device numbers.

	These new (FreeBSD compat) formatting options are added:

	   %Hd  major device number in decimal (st_dev)
	   %Ld  minor device number in decimal (st_dev)
	   %Hr  major device type in decimal (st_rdev)
	   %Lr  minor device type in decimal (st_rdev)
	   %r   (composed) device type in decimal (st_rdev)
	   %R   (composed) device type in hex (st_rdev)

	* doc/coreutils.texi (stat invocation): Document new formats.
	* src/stat.c (print_it): Handle the new %H and %L modifiers.
	(print_statfs): Adjust to passing the format as two chars
	rather than an int.  Using an int was introduced in commit db42ae78,
	but using separate chars is cleaner and more extensible.
	(print_stat): Likewise.  Handle any modifiers and the new 'r' format.
	(usage): Document the new formats.
	* tests/misc/stat-fmt.sh: Add a test case for new modifiers.
	Addresses https://bugs.gnu.org/48960

2021-06-12  Paul Eggert  <eggert@cs.ucla.edu>

	build: update gnulib submodule to latest
	Coreutils mistakenly did not list xstrndup as a module
	that it depends on directly.  When the latest Gnulib removed
	the dirname module's dependency on xstrndup, this mistake
	caused coreutils to not build.  Since all of Coreutils's
	uses of xstrndup know the string length, xmemdup0 is a better
	match for what's needed.  Since the size args are typically
	signed or derived from subtracting pointers, the new Gnulib
	ximemdup0 function is a better match yet.
	So, use ximemdup0 instead of xstrndup.
	* src/cut.c, src/dircolors.c, src/expand-common.c, src/expand.c:
	* src/numfmt.c, src/set-fields.c, src/unexpand.c:
	Do not include xstrndup.h; no longer needed.
	* src/dircolors.c (parse_line):
	* src/expand-common.c (parse_tab_stops):
	* src/numfmt.c (parse_format_string):
	* src/set-fields.c (set_fields):
	Use ximemdup0 instead of xstrndup.

2021-05-28  Jim Meyering  <meyering@fb.com>

	maint: bootstrap: remove reference to unused hash-pjw module
	* bootstrap.conf (gnulib_modules): Remove hash-pjw. No longer used.

2021-05-15  Pádraig Brady  <P@draigBrady.com>

	build: update gnulib submodule to latest
	Fixes a false test failure with MALLOC_CHECK_ set.

	* gnulib: Update to latest.

2021-05-15  Pádraig Brady  <P@draigBrady.com>

	copy: remove fiemap logic
	This is now only used on 10 year old linux kernels,
	and performs a sync before each copy.

	* src/copy.c (extent_copy): Remove function and all callers.
	* src/extent-scan.c: Remove.
	* src/extent-scan.h: Remove.
	* src/fiemap.h: Remove.
	* src/local.mk: Adjust for removed files.
	* NEWS: Adjust to say fiemap is removed.

2021-05-13  Pádraig Brady  <P@draigBrady.com>

	copy: disallow copy_file_range() on Linux kernels before 5.3
	copy_file_range() before Linux kernel release 5.3 had many issues,
	as described at https://lwn.net/Articles/789527/, which was
	referenced from https://lwn.net/Articles/846403/; a more general
	article discussing the generality of copy_file_range().
	Linux kernel 5.3 was released in September 2019, which is new enough
	that we need to actively avoid older kernels.

	* src/copy.c (functional_copy_file_range): A new function
	that returns false for Linux kernels before version 5.3.
	(sparse_copy): Call this new function to gate use of
	copy_file_range().

2021-05-12  Pádraig Brady  <P@draigBrady.com>

	tests: fix tests/cp/sparse-2.sh false failure on some systems
	* tests/cp/sparse-2.sh: Double check cp --sparse=always,
	with dd conv=sparse, in the case where the former didn't
	create a sparse file.  Now that this test is being newly run
	on macos, we're seeing a failure due to seek() not creating
	holes on apfs unless the size is >= 16MiB.

2021-05-12  Pádraig Brady  <P@draigBrady.com>

	tests: ensure we test SEEK_DATA where used
	fiemap is no longer the default copy implementation,
	so check for SEEK_DATA support instead as that's preferred.
	This will ensure better test coverage on systems without fiemap.

	* init.cfg: Replace fiemap_capable_ with seek_data_capable_.
	This is best supported with python 3 so prefer that.
	* tests/seek-data-capable: A new test script checking for
	SEEK_DATA support on the passed file name,
	called from seek_data_capable_.
	* tests/fiemap-capable: Remove no longer used probing script.
	* tests/cp/fiemap-perf.sh: Renamed to tests/cp/sparse-perf.sh
	* tests/cp/fiemap-2.sh: Renamed to tests/cp/sparse-2.sh
	* tests/cp/fiemap-extents.sh: Renamed to tests/cp/sparse-extents.sh
	* tests/cp/sparse-fiemap.sh: Renamed to tests/cp/sparse-extents-2.sh
	* tests/cp/fiemap-FMR.sh: Renamed to tests/cp/copy-FMR.sh
	* tests/local.mk: Reference the renamed tests.

2021-05-12  Pádraig Brady  <P@draigBrady.com>

	copy: handle system security config issues with copy_file_range()
	* src/copy.c (sparse_copy): Upon EPERM from copy_file_range(),
	fall back to a standard copy, which will give a more accurate
	error as to whether the issue is with the source or destination.
	Also this will avoid the issue where seccomp or apparmor are
	not configured to handle copy_file_range(), in which case
	the fall back standard copy would succeed without issue.
	This specific issue with seccomp was noticed for example in:
	https://github.com/golang/go/issues/40900
