]> git.ipfire.org Git - thirdparty/coreutils.git/log
thirdparty/coreutils.git
2 years agojoin: prefer signed types
Paul Eggert [Mon, 31 Jul 2023 23:29:49 +0000 (16:29 -0700)] 
join: prefer signed types

* src/join.c (struct outlist, struct field, struct line)
(struct seq, autocount_1, autocount_2, join_field_1, join_field_2)
(extract_field, keycmp, check_order, init_linep, free_spareline)
(getseq, delseq, prfield, prfields, prjoin, join, add_field)
(string_to_join_field, decode_field_spec, add_field_list)
(set_join_field, main):
Prefer signed integers to unsigned.

2 years agofactor: prefer signed types
Paul Eggert [Mon, 31 Jul 2023 20:43:19 +0000 (13:43 -0700)] 
factor: prefer signed types

When it’s easy, prefer signed types to unsigned, as
they are less confusing and allow overflow checking.
* src/factor.c (struct mp_factors, udiv_qrnnd)
(count_leading_zeros, count_trailing_zeros)
(factor_insert_multiplicity, mp_factor_clear, mp_factor_insert)
(factor_insert_refind, factor_using_division)
(mp_factor_using_division, powm2, millerrabin, millerrabin2)
(mp_millerrabin, prime_p, prime2_p, mp_prime_p, isqrt, isqrt2)
(invtab, q_freq, factor_using_squfof, strto2uintmax)
(print_factors_single, main):
Prefer signed integers to unsigned.

2 years agomaint: include idx.h everywhere
Paul Eggert [Mon, 31 Jul 2023 18:24:08 +0000 (11:24 -0700)] 
maint: include idx.h everywhere

* src/system.h: Include idx.h here, instead of in every file
that currently uses idx_t.  This should make it easier to use
idx_t in the future.

2 years agowho: fix only-theoretical overflow
Paul Eggert [Mon, 31 Jul 2023 18:21:25 +0000 (11:21 -0700)] 
who: fix only-theoretical overflow

Change stzncpy’s implementation to match its comment, in the case
where SRC + LEN would overflow.  This case never happens in coreutils.
* src/system.h (stzncpy): Work even if SRC + LEN would overflow.

2 years agotac: handle short reads on input
Pádraig Brady [Mon, 31 Jul 2023 11:41:26 +0000 (12:41 +0100)] 
tac: handle short reads on input

This can be reproduced by getting the read() above 2G,
which induces a short read, thus triggering the erroneous failure.

  $ truncate -s 5G 5G

  $ cat 5G | TMPDIR=$PWD tac | wc -c
  tac: /tmp/tacFt7txA: read error: Illegal seek
  0

With the fix in place we now get:

  $ cat 5G | TMPDIR=$PWD src/tac | wc -c
  5368709120

* src/tac.c (tac_seekable): Use full_read() to handle short reads.
* NEWS: Mention the bug fix.
Reported at https://bugs.debian.org/1042546

2 years agouptime: output correct user count on OpenBSD
Bruno Haible [Sun, 30 Jul 2023 14:30:08 +0000 (16:30 +0200)] 
uptime: output correct user count on OpenBSD

* src/uptime.c (print_uptime, uptime): Always call read_utmp
and count the result.
* NEWS: Mention the fix (text by Bruno Haible).

2 years agobuild: update gnulib submodule to latest
Paul Eggert [Mon, 31 Jul 2023 16:13:23 +0000 (09:13 -0700)] 
build: update gnulib submodule to latest

2 years agobuild: update gnulib submodule to latest
Paul Eggert [Sun, 30 Jul 2023 00:12:39 +0000 (17:12 -0700)] 
build: update gnulib submodule to latest

* NEWS: Mention a bug that this fixes.

2 years agomv: better diagnostic for 'mv dir x' failure
Paul Eggert [Sat, 22 Jul 2023 20:39:17 +0000 (13:39 -0700)] 
mv: better diagnostic for 'mv dir x' failure

Problem reported by Nir Oren <https://bugs.gnu.org/64785>.
* src/copy.c (copy_internal): Use a more-specific diagnostic when
a rename fails due to a problem that must be due to the
destination, avoiding user confusion in cases like 'mv dir x'
where x is a nonempty directory.
* tests/mv/dir2dir.sh: Adjust to match.

2 years agodoc: clarify tail -n/-c +NUM operation
Pádraig Brady [Thu, 20 Jul 2023 13:50:56 +0000 (14:50 +0100)] 
doc: clarify tail -n/-c +NUM operation

tail -n/-c +NUM, is different from tail -n/-c NUM,
and head -n/-c NUM, and head -n/c -NUM, in that it
specifies a 1 based index rather than a count to skip/include.
So clarify this in tail --help and tail info manual.
Note we also mention this gotcha at:
https://www.pixelbeat.org/docs/coreutils-gotchas.html#tail

* doc/coreutils.texi (tail invocation): Give examples for -c/-n +NUM,
to make it clear one has to specify a number 1 larger than
might be expected.
* src/tail.c (usage): State the skip at start edge case more clearly
in the -n description. -c is not often used with tail so we leave
full explanation of that to the info manual.  Also split the string
to simplify translation.

2 years agomaint: add a syntax check to prevent use of NULL
Pádraig Brady [Tue, 18 Jul 2023 22:08:42 +0000 (23:08 +0100)] 
maint: add a syntax check to prevent use of NULL

* cfg.mk (sc_prohibit_NULL): Direct to use nullptr instead.

2 years agotests: split: provide more isolated /tmp handling
Pádraig Brady [Tue, 18 Jul 2023 11:40:57 +0000 (12:40 +0100)] 
tests: split: provide more isolated /tmp handling

* tests/split/l-chunk.sh: Move the "expensive" portion to ...
* tests/split/l-chunk-root.sh: .. A new test split from l-chunk.sh
which uses an isolated TMPDIR, rather than exhausting /tmp,
as that gives false positive failures with some other coreutils tests
like tac-2-nonseekable.sh and shuf-reservoir.sh at least.
* tests/local.mk: Reference the new test.

2 years agosplit: honor $TMPDIR for temp files
Pádraig Brady [Tue, 18 Jul 2023 17:55:30 +0000 (18:55 +0100)] 
split: honor $TMPDIR for temp files

* bootstrap.conf: Depend on tmpdir rather than tmpfile,
as the standard tmpfile() doesn't honor $TMPDIR.
* src/split.c (copy_to_tmpfile): Adjust to call temp_stream() rather
than tmpfile();
* NEWS: Mention the improvement.

2 years agotac: fall back to /tmp if $TMPDIR is unavailable
Pádraig Brady [Tue, 18 Jul 2023 14:39:05 +0000 (15:39 +0100)] 
tac: fall back to /tmp if $TMPDIR is unavailable

This also refactors temp_stream() to its own module,
in preparation for use by split.

* src/tac.c: Refactor temp_stream() out to ...
* src/temp-stream.c: ... A new module mostly refactored from tac,
but uses tmpdir to more robustly support $TMPDIR,
while falling back to /tmp if not available.
* src/temp-stream.h: The new module interface.
* src/local.mk: Reference the new module from tac.
* tests/tac/tac.pl: Adjust to non failing missing $TMPDIR.
* po/POTFILES.in: Reference the new module with translatable strings.
* NEWS: Mention the user visible improvements to tac TMPDIR handling.

2 years agomaint: add syntax check to ensure safe mkstemp usage
Pádraig Brady [Tue, 18 Jul 2023 17:38:42 +0000 (18:38 +0100)] 
maint: add syntax check to ensure safe mkstemp usage

One needs to include stdlib--.h if using mkstemp()
lest one hits esoteric bugs with closed stdin etc.

* cfg.mk (sc_require_stdlib_safer): Add a new syntax check.
(sc_require_stdio_safer): Fix this; broken since commit fa7ed969c3.

2 years agojoin: promptly diagnose write errors
Pádraig Brady [Sat, 15 Jul 2023 20:55:23 +0000 (21:55 +0100)] 
join: promptly diagnose write errors

* src/join.c (prjoin): Check for write errors after each line.
* tests/misc/write-errors.sh: enable the test for join.
* NEWS: Mention the improvement.

2 years agocomm: promptly diagnose write errors
Pádraig Brady [Sat, 15 Jul 2023 20:43:07 +0000 (21:43 +0100)] 
comm: promptly diagnose write errors

* src/comm.c (writeline): Simplify by removing the unneeded STREAM
parameter.  Call write_error() upon ferror().
(compare_files): Adjust to simplified writeline().
* tests/misc/write-errors.sh: Enable comm test.
* NEWS: Mention the improvement.

2 years agocut: promptly diagnose write errors
Pádraig Brady [Sat, 15 Jul 2023 20:23:55 +0000 (21:23 +0100)] 
cut: promptly diagnose write errors

* src/cut.c (cut_bytes): Diagnose errors from fwrite() and putchar().
(cut_fields): Likewise.
* tests/misc/write-errors.sh: Enable the test for cut,
and augment to cover both cut_bytes() and cut_fields().
* NEWS: Mention the improvement.

2 years agouniq: promptly diagnose write errors
Pádraig Brady [Sat, 15 Jul 2023 20:10:38 +0000 (21:10 +0100)] 
uniq: promptly diagnose write errors

* src/uniq.c (write_line): Check the output from fwrite() immediately.
(check_file): Likewise.
* tests/misc/write-errors.sh: Enable the test case.
* NEWS: Mention the improvement.

2 years agood: promptly diagnose write errors
Pádraig Brady [Tue, 11 Jul 2023 11:46:50 +0000 (12:46 +0100)] 
od: promptly diagnose write errors

* src/od.c (dump): Check for write errors after each block written,
to exit early even with large / unbounded inputs.
* tests/misc/write-errors.sh: enable od check.
* NEWS: Mention the improvement.
Fixes https://bugs.gnu.org/64540

2 years agoall: avoid repeated diagnostic upon write error
Pádraig Brady [Sat, 15 Jul 2023 19:41:44 +0000 (20:41 +0100)] 
all: avoid repeated diagnostic upon write error

* cfg.mk (sc_some_programs_must_avoid_exit_failure): Adjust to
avoid false positive.
(sc_prohibit_exit_write_error): A new syntax check to prohibit
open coding error(..., "write error"); instead directing to use...
* src/system.h (write_error): ... a new function to clear stdout errors
before we explicitly diagnose a write error and exit.
* src/basenc.c: Use write_error() to ensure no repeated diagnostics.
* src/cat.c: Likewise.
* src/expand.c: Likewise.
* src/factor.c: Likewise.
* src/paste.c: Likewise.
* src/seq.c: Likewise.
* src/shuf.c: Likewise.
* src/split.c: Likewise.
* src/tail.c: Likewise.
* src/tr.c: Likewise.
* src/unexpand.c: Likewise.
* tests/misc/write-errors.sh: Remove TODOs for the fixed utilities:
expand, factor, paste, shuf, tr, unexpand.

2 years agotests: ensure utilties exit promptly upon write error
Pádraig Brady [Tue, 11 Jul 2023 12:28:53 +0000 (13:28 +0100)] 
tests: ensure utilties exit promptly upon write error

* tests/local.mk: Reference the new test.
* tests/misc/write-errors.sh: A new test to ensure utilities
exit promptly upon writing to /dev/full.

2 years agocksum: improve problematic_chars function
Jim Meyering [Fri, 14 Jul 2023 05:29:52 +0000 (22:29 -0700)] 
cksum: improve problematic_chars function

* src/digest.c (problematic_chars): Implement using strcspn,
and traversing S only once, rather than once per escaped byte.

2 years agomaint: give a new function the "pure" attribute
Pádraig Brady [Wed, 12 Jul 2023 19:34:47 +0000 (20:34 +0100)] 
maint: give a new function the "pure" attribute

* src/digest.c (problematic_chars): This recently introduced
function does not modify state so is pure, even though GCC 13.1 at least
did not warn about that attribute being appropriate.

2 years agocksum: escape filenames with a leading '\' in --check status
Pádraig Brady [Sat, 1 Jul 2023 16:01:18 +0000 (17:01 +0100)] 
cksum: escape filenames with a leading '\' in --check status

* src/digest.c (digest_check): Also escape in the case that the
file name contains '\'.
* tests/cksum/md5sum-bsd.sh: Add a test case.
* doc/coreutils.texi (md5um invocation): Clarify escaping operation.
* NEWS: Mention the bug fix.
Fixes https://bugs.gnu.org/64392

2 years agocksum: support transparent emulation of older utils
Pádraig Brady [Sat, 8 Jul 2023 14:14:12 +0000 (15:14 +0100)] 
cksum: support transparent emulation of older utils

Support -b, --binary, and -t, --text
to allow full emulation of older utilities with:
  exec cksum -a $algo --untagged "$@"
Note this would diverge from OpenBSD's support of cksum -b.

* src/digest.c: Change -b to mean --binary, not --base64 in all cases.
Accept -b and -t in all cases.  Keep --binary and --text undocumented
for cksum.
* tests/cksum/cksum-base64.pl: s/-b/--base64/.
* tests/cksum/cksum-a.sh: Ensure cksum supports -b and -t appropriately.
* NEWS: Mention the change in behavior.

2 years agomaint: avoid static analysis failure for ignored dup2 return
Pádraig Brady [Sat, 8 Jul 2023 12:42:51 +0000 (13:42 +0100)] 
maint: avoid static analysis failure for ignored dup2 return

* src/sort.c: We're ignoring failures from these calls,
so do so explicitly to avoid static analysis issues
as reported by coverity.

2 years agotests: mktemp -t: $TMPDIR has higher priority than -p
Sylvestre Ledru [Mon, 3 Jul 2023 21:37:11 +0000 (23:37 +0200)] 
tests: mktemp -t: $TMPDIR has higher priority than -p

* tests/misc/mktemp.pl: Ensure that with -t,
$TMPDIR has precedence over -p.

2 years agomaint: update .gitignore
Paul Eggert [Sat, 1 Jul 2023 18:31:41 +0000 (11:31 -0700)] 
maint: update .gitignore

Add some newly-created Gnulib files,
plus some bootstrap temporaries.

2 years agostty: fix untranslated diagnostics
Paul Eggert [Sat, 1 Jul 2023 18:31:41 +0000 (11:31 -0700)] 
stty: fix untranslated diagnostics

* src/stty.c (set_speed): Translate diagnostics.

2 years agomaint: sync bootstrap from Gnulib
Paul Eggert [Sat, 1 Jul 2023 18:31:41 +0000 (11:31 -0700)] 
maint: sync bootstrap from Gnulib

* bootstrap: Copy from gnulib/build-aux/bootstrap.

2 years agomaint: prefer ckd_add to INT_ADD_WRAPV etc
Paul Eggert [Sat, 1 Jul 2023 18:31:41 +0000 (11:31 -0700)] 
maint: prefer ckd_add to INT_ADD_WRAPV etc

* bootstrap.conf (gnulib_modules): Add stdckdint.
Also, in C source code, prefer C23 macros like ckd_add
to their Gnulib near-equivalents like INT_ADD_WRAPV.
Include <stdckdint.h> as needed.

2 years agowho: don’t crash if clock gyrates
Paul Eggert [Sat, 1 Jul 2023 18:31:41 +0000 (11:31 -0700)] 
who: don’t crash if clock gyrates

* src/who.c (idle_string): Avoid signed integer overflow
if the superuser messes with the clock in bizarre ways.
Remove an ‘assume’ that wasn’t correct under this scenario.

2 years agodf: omit GCC 5 ‘assume’s
Paul Eggert [Sat, 1 Jul 2023 18:31:41 +0000 (11:31 -0700)] 
df: omit GCC 5 ‘assume’s

* src/df.c (main):
* src/shred.c (dopass):
Omit ‘assumes’ needed to pacify GCC 5 but not needed with GCC 13.

2 years agomaint: pacify GCC bug#109613 better
Paul Eggert [Sat, 1 Jul 2023 18:31:40 +0000 (11:31 -0700)] 
maint: pacify GCC bug#109613 better

* src/cut.c (cut_file):
* src/nl.c (nl_file): Pacify GCC Bug#109613 in a better way, by
narrowing the coverage of the ‘assume’ so that bugs in the
no-longer-covered part are not masked.

2 years agomaint: stop pacifying Parfait
Paul Eggert [Sat, 1 Jul 2023 18:31:40 +0000 (11:31 -0700)] 
maint: stop pacifying Parfait

* src/fmt.c (get_paragraph):
* src/stty.c (display_changed, display_all): Omit calls to
‘assume’ that are present only to pacify false positives by Parfait
<https://labs.oracle.com/pls/apex/f?p=94065:12:17236785746387:13>,
which went in-house in 2012 and never came back.

2 years agobuild: update gnulib submodule to latest
Paul Eggert [Sat, 1 Jul 2023 18:31:40 +0000 (11:31 -0700)] 
build: update gnulib submodule to latest

2 years agomaint: go back to using ‘error’
Paul Eggert [Sat, 1 Jul 2023 18:31:40 +0000 (11:31 -0700)] 
maint: go back to using ‘error’

Now that Gnulib’s ‘error’ module does proper static checking
for not returning, we need no longer use the ‘die’ macro.
This makes code easier to read for people that are used to ‘error’.
* cfg.mk (error_fns, exclude_file_name_regexp): Remove ‘die’.
(sc_die_EXIT_FAILURE): Remove.
* src/die.h: Remove.  All includes removed.  All calls to ‘die’
changed back to calls to ‘error’.
* src/install.c (get_ids): Use quoteaf (problem found with
make syntax-check).
* src/system.h: Include error.h, since some of our macros call ‘error’.
Stop including error.h elsewhere.

2 years agomaint: improve static and dynamic checking
Paul Eggert [Sat, 1 Jul 2023 18:31:40 +0000 (11:31 -0700)] 
maint: improve static and dynamic checking

This modernizes the source code somewhat, to take advantage
of advances in GCC over the years, and Gnulib’s ‘assure’ module.
Include assure.h in files that now need it.
Do not include assert.h directly; it’s no longer needed.
* bootstrap.conf (gnulib_modules): Add ‘assure’.
* gl/lib/randread.c (randread_error):
* src/chmod.c (describe_change):
* src/chown-core.c (describe_change):
* src/cp.c (decode_preserve_arg):
* src/head.c (diagnose_copy_fd_failure):
* src/ls.c (parse_ls_color):
* src/od.c (decode_one_format):
* src/split.c (main):
* src/test.c (binary_operator, posixtest):
Prefer affirm to abort, since it has better diagnostics in the
normal case and better performance with -DNDEBUG.
* gl/lib/xdectoint.c, src/die.h: Include stddef.h, for unreachable.
* gl/lib/xdectoint.c: Do not include verify.h; no longer needed.
* gl/lib/xdectoint.c (__xnumtoint):
* src/die.h (die):
Prefer C23 unreachable () to assume (false).
* gl/lib/xfts.c (xfts_open):
* src/basenc.c (base32hex_encode):
* src/copy.c (abandon_move, copy_internal, valid_options):
* src/cut.c (cut_fields):
* src/df.c (alloc_field, decode_output_arg, get_dev):
* src/du.c (process_file, main):
* src/echo.c (usage):
* src/factor.c (udiv_qrnnd, mod2, gcd2_odd, factor_insert_large)
(mulredc2, factor_using_pollard_rho, isqrt2, div_smallq)
(factor_using_squfof):
* src/iopoll.c (iopoll_internal, fwrite_wait):
* src/join.c (add_field):
* src/ls.c (dev_ino_pop, main, gobble_file, sort_files):
* src/mv.c (do_move):
* src/od.c (decode_format_string, read_block, dump, main):
* src/remove.c (rm):
* src/rm.c (main):
* src/sort.c (stream_open):
* src/split.c (next_file_name, lines_chunk_split):
* src/stdbuf.c (main):
* src/stty.c (set_speed):
* src/tac-pipe.c (line_ptr_decrement, line_ptr_increment):
* src/touch.c (touch):
* src/tr.c (find_bracketed_repeat, get_next)
(validate_case_classes, get_spec_stats, string2_extend, main):
* src/tsort.c (search_item, tsort):
* src/wc.c (main):
Prefer affirm to assert, as it allows for better static
checking when compiling with -DNDEBUG.
* src/chown-core.c (change_file_owner):
* src/df.c (get_field_list):
* src/expr.c (printv, null, tostring, toarith, eval2):
* src/ls.c (time_type_to_statx, calc_req_mask, get_funky_string)
(print_long_format):
* src/numfmt.c (simple_strtod_fatal):
* src/od.c (decode_one_format):
* src/stty.c (mode_type_flag):
* src/tail.c (xlseek):
* src/tr.c (is_char_class_member, get_next, get_spec_stats)
(string2_extend):
Prefer unreachable () to abort () or assert (false) when merely
pacifying the compiler, e.g., in a switch statement on an enum
where all cases are covered.
* src/copy.c (valid_options): Now returns void; the bool was useless.
Caller no longer needs to assert.
* src/csplit.c (find_line):
* src/expand-common.c (next_file):
* src/shred.c (incname):
* src/sort.c (main):
* src/tr.c (append_normal_char, append_range, append_char_class)
(append_repeated_char, append_equiv_class):
* src/tsort.c (search_item):
Omit assert, since the hardware will check for us.
* src/df.c (header_mode): Now the enum type it should have been.
* src/du.c (process_file):
* src/ls.c (assert_matching_dev_ino):
* src/tail.c (valid_file_spec):
* src/tr.c (validate_case_classes):
Mark defns with MAYBE_UNUSED if they’re not used when -DNDEBUG.
* src/factor.c (prime_p, prime2_p, mp_prime_p): Now ATTRIBUTE_PURE.
Prefer affirm to error+abort.  No need to translate this diagnostic.
* src/fmt.c (get_paragraph):
* src/stty.c (display_changed, display_all, sane_mode):
* src/who.c (idle_string):
Prefer assume to assert, since the goal is merely pacification
and assert doesn’t pacify anyway if -DNDEBUG is used.
* src/join.c (decode_field_spec):
Omit unreachable abort.
* src/ls.c (assert_matching_dev_ino, main):
* src/tr.c (get_next):
Prefer assure to assert, since the check is relatively expensive
and won’t help static analysis.
* src/ls.c (main):
Prefer static_assert to assert of a constant expression.
(format_inode): Redo to make it clear that buflen doesn’t matter,
and that buf must have a certain number of bytes.  All callers changed.
This pacifies -Wformat-overflow.
* src/od.c (decode_one_format):
Omit an assert that tested for obviously undefined behavior,
as the compiler could optimize it away anyway.
* src/od.c (decode_one_format, decode_format_string):
Prefer ATTRIBUTE_NONNULL to runtime checking.
* src/stat.c: Do not include <stddef.h> since system.h does that now.
* src/sync.c (sync_arg):
Prefer unreachable () to assert (true), which was a typo.
* src/system.h: Include stddef.h, for unreachable.
* src/tail.c (xlseek): Simplify by relying on ‘error’ to exit.

2 years agomaint: fix indenting in previous change
Paul Eggert [Sat, 1 Jul 2023 18:31:40 +0000 (11:31 -0700)] 
maint: fix indenting in previous change

* src/ptx.c: Adjust to fit into 80 columns.

2 years agomaint: prefer C23-style nullptr
Paul Eggert [Thu, 29 Jun 2023 22:27:21 +0000 (15:27 -0700)] 
maint: prefer C23-style nullptr

* bootstrap.conf (gnulib_modules): Add nullptr.
In code, prefer nullptr to NULL where either will do.

2 years agobuild: ensure that makeinfo ≥ 6.8 checks the @menu structure
Bruno Haible [Thu, 22 Jun 2023 21:59:11 +0000 (23:59 +0200)] 
build: ensure that makeinfo ≥ 6.8 checks the @menu structure

See <https://lists.gnu.org/r/bug-texinfo/2023-06/msg00015.html>.

* doc/local.mk (MAKEINFO): New variable.
* cfg.mk (_makefile_at_at_check_exceptions): Update.

2 years agob2sum: fix UAR with --check with malformed checksum lines
Pádraig Brady [Thu, 22 Jun 2023 20:33:58 +0000 (21:33 +0100)] 
b2sum: fix UAR with --check with malformed checksum lines

* src/digest.c (split_3): Reinstate the check for whitespace after the
digest portion of the line, so that we exit early before inspecting
the file name which would be outside the passed buffer in the case
where the input does not contain a newline.
* tests/cksum/b2sum.sh: Add a test case.
* NEWS: Mention the bug fix.
* THANKS.in: Add Frank Busse who has reported multiple bugs using KLEE.
Fixes https://bugs.gnu.org/64229

2 years agomaint: update GCC bug number in comment
Paul Eggert [Wed, 21 Jun 2023 07:08:21 +0000 (00:08 -0700)] 
maint: update GCC bug number in comment

2 years agodoc: mention fix for bug#64123
Paul Eggert [Tue, 20 Jun 2023 06:23:39 +0000 (23:23 -0700)] 
doc: mention fix for bug#64123

2 years agobuild: update gnulib submodule to latest
Paul Eggert [Mon, 19 Jun 2023 21:17:32 +0000 (14:17 -0700)] 
build: update gnulib submodule to latest

2 years agotests: move tests to a directory per utility
Sylvestre Ledru [Sun, 11 Jun 2023 09:55:56 +0000 (11:55 +0200)] 
tests: move tests to a directory per utility

* cfg.mk: Adjust syntax check exclusion paths.
* tests/local.mk: Adjust for renamed tests.

2 years agodoc: mention cksum error fix with cpu feature checks changes
Pádraig Brady [Wed, 14 Jun 2023 23:53:54 +0000 (00:53 +0100)] 
doc: mention cksum error fix with cpu feature checks changes

* NEWS: Mention the error message to aid those searching
for solutions to the issue, and mention cksum also
as that was confirmed to fix the error with the adjusted
cpu feature detection, as discussed at https://bugs.debian.org/1037264
* src/cksum.c: Cleanup syntax-check failure from previous commit.

2 years agocksum,wc: clean up hw capability checking
Paul Eggert [Wed, 14 Jun 2023 21:52:37 +0000 (14:52 -0700)] 
cksum,wc: clean up hw capability checking

* src/cksum.c (cksum_pclmul) [!CRCTAB && !USE_PCLMUL_CRC32]:
Remove macro.
(cksum_fp): No longer file-scope.
(pclmul_supported): Define only if USE_PCLMUL_CRC32.
This omits the debug output "using generic hardware support"
for simplicity and consistency with wc’s output.
(crc_sum_stream) [!USE_PCLMUL_32]: No need for static function pointer.
* src/wc.c (wc_lines_p) [USE_AVX2_WC_LINECOUNT]: No longer file-scope.
(wc) [USE_AVX2_WC_LINECOUNT]: Check for avx2 support at most once,
which was surely the code’s original intent.
(wc) [!USE_AVX2_WC_LINECOUNT]: No need for static function pointer.

2 years agocksum,wc: don’t include <cpuid.h>
Paul Eggert [Wed, 14 Jun 2023 21:18:42 +0000 (14:18 -0700)] 
cksum,wc: don’t include <cpuid.h>

* src/cksum.c [!CRCTAB && USE_PCLMUL_CRC32]:
* src/wc.c [USE_AVX2_WC_LINECOUNT]:
Don’t include <cpuid.h>; no longer needed.

2 years agocksum: fix bug in check for cksum_pclmul
Paul Eggert [Wed, 14 Jun 2023 21:13:35 +0000 (14:13 -0700)] 
cksum: fix bug in check for cksum_pclmul

This fixes a typo in the previous patch.
Problem reported by Pádraig Brady <https://bugs.gnu.org/64058#11>.
* src/cksum.c (pclmul_supported): Also require AVX support
to use cksum_pclmul.

2 years agowc: port to kernels that disable XSAVE YMM
Paul Eggert [Wed, 14 Jun 2023 04:10:24 +0000 (21:10 -0700)] 
wc: port to kernels that disable XSAVE YMM

Problem reported by Dave Hansen <https://bugs.gnu.org/64058>.
Apply similar change to cksum and pclmul, too.
* NEWS: Mention wc fix.
* configure.ac (cpuid_exists, get_cpuid_count_exists):
Remove.  All uses removed, since we no longer use __get_cpuid or
__get_cpuid_count.
(pclmul_intrinsic_exists, avx2_intrinsic_exists): Set to no if
__builtin_cpu_supports calls cannot be compiled.
(HAVE_PCLMUL_INTRINSIC, HAVE_AVX2_INTRINSIC): Remove; unused.
Simplify surrounding code because of this.
* src/cksum.c (pclmul_supported):
* src/wc.c (avx2_supported):
Use __builtin_cpu_supports instead of doing it by hand.
Simplify surrounding code because of this.

2 years agodircolors: update list of backup file extensions
Ville Skyttä [Mon, 12 Jun 2023 20:27:37 +0000 (23:27 +0300)] 
dircolors: update list of backup file extensions

* src/dircolors.hin: Sort backup section by extension.
Treat .dpkg-new and .dpkg-tmp as backup files.
Treat .crdownload (Chromium based browsers' partial download)
as a backup file.

2 years agodd: fix parsing of numbers with more than two multipliers
Pádraig Brady [Sat, 10 Jun 2023 13:18:00 +0000 (14:18 +0100)] 
dd: fix parsing of numbers with more than two multipliers

* src/dd.c (parse_integer): Use recursion to support more than two
multipliers.  Also protect suffix[-1] access to ensure we don't
inspect before the passed string.
* tests/dd/bytes.sh: Add test cases.
* doc/coreutils.texi (dd invocation): Note the support for specifying
many multipliers in a number.
* NEWS: Mention the bug fix.
Fixes https://bugs.debian.org/1037275

2 years agobuild: update gnulib submodule to latest
Pádraig Brady [Fri, 9 Jun 2023 10:14:51 +0000 (11:14 +0100)] 
build: update gnulib submodule to latest

* gnulib: Update to latest.
* po/POTFILES.in: Remove recent sc_po_check workaround.
* tests/misc/date-debug.sh: Adjust as per spelling fix.

2 years agodoc: od --strings: clarify operation
Pádraig Brady [Thu, 8 Jun 2023 09:58:10 +0000 (10:58 +0100)] 
doc: od --strings: clarify operation

* doc/coreutils.texi (od invocation): Remove mention of ASCII,
as all printable characters in unibyte locales are output.
* src/od.c (usage): Clarify that only NUL terminated strings
are displayed, and that it's printable chars, not only graphic chars
that are output. I.e., spaces are output also if part of the string.
Reported at https://bugs.ddebian.org/1037217

2 years agomaint: ls.c: update stale comment for previous commit
Pádraig Brady [Wed, 7 Jun 2023 20:51:47 +0000 (21:51 +0100)] 
maint: ls.c: update stale comment for previous commit

* src/ls.c (gobble_file): Update comment to correspond with
the changes in the previous commit.

2 years agols: display command line symlinks that return ELOOP
Pádraig Brady [Wed, 7 Jun 2023 12:42:36 +0000 (13:42 +0100)] 
ls: display command line symlinks that return ELOOP

* src/ls.c (gobble_file): Ensure we lstat() a symlink
specified on the command line, if we receive ELOOP from stat().
* tests/ls/symlink-loop.sh: Add a new test.
* tests/local.mk: Reference the new test.
* NEWS: Mention the bug fix.
Fixes https://bugs.gnu.org/63931

2 years agols: use more standard symlink traversal
Pádraig Brady [Wed, 7 Jun 2023 11:32:46 +0000 (12:32 +0100)] 
ls: use more standard symlink traversal

* src/ls.c (gobble_file): stat() symlinks directly,
rather than their targets.  This will be more consistent
with how symlinks are generally accessed.
(make_link_name): Remove no longer used function.
Addresses https://bugs.gnu.org/63931

2 years agodoc: reference COPYING from README
Pádraig Brady [Wed, 7 Jun 2023 14:11:13 +0000 (15:11 +0100)] 
doc: reference COPYING from README

* README: Reference COPYING as per the GNU coding standards,
and soon to be enforced with a syntax-check from gnulib.

2 years agomaint: avoid syntax-check failure
Pádraig Brady [Tue, 6 Jun 2023 10:33:20 +0000 (11:33 +0100)] 
maint: avoid syntax-check failure

* po/POTFILES.in: Add lib/propername.h due to new comments
that trigger sc_po_check.

2 years agodoc: NEWS: mention the more defensive copy_file_range avoidance
Pádraig Brady [Tue, 6 Jun 2023 10:12:28 +0000 (11:12 +0100)] 
doc: NEWS: mention the more defensive copy_file_range avoidance

* NEWS: Mention the improvement in reinstating runtime avoidance
of copy_file_range(), that came with the last gnulib update,
picking up gnulib commit fb034b35.

2 years agobuild: update gnulib submodule to latest
Paul Eggert [Tue, 6 Jun 2023 05:38:20 +0000 (22:38 -0700)] 
build: update gnulib submodule to latest

2 years agomaint: use consistent make variable interpolation syntax
Pádraig Brady [Thu, 1 Jun 2023 12:19:24 +0000 (13:19 +0100)] 
maint: use consistent make variable interpolation syntax

* cfg.mk: Prefer $() interpolation over ${}
lest the reader is confused as to whether shell interpolation,
i.e. $${} was intended.

2 years agosplit: --additional-suffix: disallow trailing '/'
Pádraig Brady [Sun, 28 May 2023 14:17:46 +0000 (15:17 +0100)] 
split: --additional-suffix: disallow trailing '/'

Note mktemp --suffix has the same inconsistency,
but mktemp -d does support creating dirs
so probably best to leave that as is.

* src/split.c (main): Check for trailing /.
* tests/split/additional-suffix.sh: Augment the test.
Reported in https://bugs.debian.org/1036827

2 years agomaint: adjust code to handle "error" syntax-check changes
Pádraig Brady [Wed, 31 May 2023 16:21:08 +0000 (17:21 +0100)] 
maint: adjust code to handle "error" syntax-check changes

* src/dd.c: Don't include no longer used error.h.
Use quoteaf() rather than quote() to quote appropriate for the shell
and to avoid the syntax-check failure,
* src/stty.c: Use quoteaf() rather than quotef()
to have more consistent quoting of the invalid arg.

2 years agomaint: augment syntax checks to cater for more "error" functions
Pádraig Brady [Wed, 31 May 2023 16:12:52 +0000 (17:12 +0100)] 
maint: augment syntax checks to cater for more "error" functions

src/cfg.mk (sc_error_quotes, sc_error_shell_quotes,
sc_error_shell_always_quotes): Include "die" and "diagnose"
in the class of error functions to check arguments for.

2 years agodd: fix ‘error’ name issue without macros
Paul Eggert [Tue, 30 May 2023 21:24:46 +0000 (14:24 -0700)] 
dd: fix ‘error’ name issue without macros

* src/dd.c (_GL_NO_INLINE_ERROR): Remove; no longer needed.
(diagnose): Rename from nl_error and omit first arg since it is
always zero.  All uses changed.
(error): Remove macro.

2 years agobuild: update gnulib submodule to latest
Pádraig Brady [Sun, 28 May 2023 13:54:01 +0000 (14:54 +0100)] 
build: update gnulib submodule to latest

* gnulib: Update to latest.
* src/dd.c: Avoid error macro redefinition.

2 years agobuild: modernize bootstrap prerequsite tools
Pádraig Brady [Fri, 19 May 2023 21:16:22 +0000 (22:16 +0100)] 
build: modernize bootstrap prerequsite tools

Following on from commit v9.0-15-gaa31b919c
which updated README-prereq...

* bootstrap.conf: Add an explicit requirement on m4.
Add an explicit requirement on texi2pdf which is often
packaged separately to makeinfo and induces a failure
far down the distribution phase if not present.
Replace the rsync dependency with wget,
which gnulib changed to in 2018.

2 years agobuild: update gnulib submodule to latest
Pádraig Brady [Fri, 19 May 2023 17:18:08 +0000 (18:18 +0100)] 
build: update gnulib submodule to latest

* gnulib: Update to latest.
* configure.ac: Remove gnulib reference, as that specific issue
is now explicitly avoided in gnulib itself.

2 years agobuild: pacify GCC 13 with -flto
Pádraig Brady [Fri, 19 May 2023 10:30:31 +0000 (11:30 +0100)] 
build: pacify GCC 13 with -flto

* src/cut.c (cut_file): Explicitly mark STREAM as nonnull to avoid
-Werror=null-dereference.
* src/nl.c (nl_file): Likewise.

2 years agobuild: revert -Wmaybe-uninitialized warnings avoidance
Pádraig Brady [Fri, 19 May 2023 06:57:36 +0000 (07:57 +0100)] 
build: revert -Wmaybe-uninitialized warnings avoidance

This reverts commit 800c86d5, as that was deemed too invasive.
We do keep the change to tee.c to allow using -O3 without warnings.
For other optimization options like -O0, -Og, -O1, -Os,
one can use WERROR_CFLAGS= to stop warnings inducing a build failure.

2 years agobuild: avoid false -Wmaybe-uninitialized warnings
Pádraig Brady [Thu, 18 May 2023 09:38:11 +0000 (10:38 +0100)] 
build: avoid false -Wmaybe-uninitialized warnings

Allow easily building a debug build for example with:
  make CFLAGS='-O0 -ggdb'

False -Wmaybe-uninitialized warnings hit in different
places depending on the compiler passes used.
These changes were tested with gcc 10.2.1, 12.2.1, and 13.1.1 like:
  for o in g s z fast 0 1 2 3; do
    make clean && make -j$(nproc) CFLAGS="-O$o" || break
  done

* src/digest.c: Disable -Wmaybe-uninitialized that gives
false positive here at -O0.
* src/ln.c: Avoid -Wmaybe-uninitialized that gives
false positive here at -O1.
* src/pr.c: Likewise.
* src/sort.c: Likewise.
* src/tee.c: Avoid -Wmaybe-uninitialized that gives
false positive here at -O3 on gcc 13.1.1 at least.
* src/cp.c: Avoid -Wmaybe-uninitialized that gives
false positive here at -Os on gcc 13.1.1 at least.
* src/copy.c: Avoid -Wmaybe-uninitialized that gives
false positive here at -Og on gcc 13.1.1 at least.
* src/head.c: Likewise.
* src/paste.c: Likewise.

2 years agobuild: gnulib: avoid false -Wstringop-overflow warning
Pádraig Brady [Thu, 18 May 2023 10:40:19 +0000 (11:40 +0100)] 
build: gnulib: avoid false -Wstringop-overflow warning

Tested on gcc 13.1.1 with: make CFLAGS='-O0 -ggdb'

* configure.ac: Disable -Wstringop-overflow for gnulib.
This warning is far too problematic in my experience:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88443
and triggers with gcc -O0 with versions 12,13 at least.

2 years agomaint: cleanups to NEWS
Pádraig Brady [Sat, 13 May 2023 09:33:14 +0000 (10:33 +0100)] 
maint: cleanups to NEWS

* NEWS: Use more consistent wording, ordering, and formatting
for recent entries.

2 years agosplit: advise the kernel of sequential access pattern
Pádraig Brady [Mon, 8 May 2023 20:22:48 +0000 (21:22 +0100)] 
split: advise the kernel of sequential access pattern

As split is often dealing with large files,
ensure we indicate to the kernel our sequential access pattern.
This was seen to operate 5% faster when reading from SSD,
as tested with:

dd bs=1M count=2K if=/dev/urandom of=big.in

for split in split.orig split; do
  # Ensure big file is not cached
  dd of=big.in oflag=nocache conv=notrunc,fdatasync count=0 status=none
  # Test read efficiency
  CWD=$PWD; (cd /dev/shm && time $CWD/src/$split -n2 $CWD/big.in)
done

real    0m9.039s
user    0m0.055s
sys     0m3.510s

real    0m8.568s
user    0m0.056s
sys     0m3.752s

* src/split.c (main): Use fdadvise to help the kernel
choose a more appropriate readahead buffer.
* NEWS: Mention the improvement.

2 years agodoc: adjust build instructions for disabling year 2038 support
Pádraig Brady [Mon, 8 May 2023 11:57:56 +0000 (12:57 +0100)] 
doc: adjust build instructions for disabling year 2038 support

* README-install: Adjust the instructions as per recent gnulib updates.

2 years agobuild: update gnulib submodule to latest
Bernhard Voelker [Sun, 7 May 2023 15:33:49 +0000 (17:33 +0200)] 
build: update gnulib submodule to latest

This fixes failures in "very-expensive" tests on FTS with many
directory entries:
  FAIL: tests/rm/ext3-perf
  FAIL: tests/rm/many-dir-entries-vs-OOM

The following shows the problem in the former of the above tests:
  $ mkdir d && seq 400000 | env -C d xargs touch )
  $ rm -rf d
  rm: traversal failed: d: Operation not supported

Gnulib commit 3f0950f65abb (2023-04-26) introduced this regression
which was fixed again with gnulib commit d4d8abb39eb0.

See discussion in
<https://lists.gnu.org/r/bug-gnulib/2023-05/msg00040.html>

* bootstrap.conf (gnulib_modules): Change "year2038-required" to
"year2038-recommended"; the module has been replaced.
* gnulib: Update to latest.
* tests/init.sh: Likewise.

2 years agodoc: time zone conversion example
Paul Eggert [Sun, 7 May 2023 16:16:29 +0000 (09:16 -0700)] 
doc: time zone conversion example

* doc/coreutils.texi (Examples of date):
Give time zone conversion example.

2 years agodoc: new subsection for date format specs
Paul Eggert [Sun, 7 May 2023 15:59:01 +0000 (08:59 -0700)] 
doc: new subsection for date format specs

* doc/coreutils.texi (Date format specifiers): New subsection,
which groups the date format specifiers without otherwise
changing contents.

2 years agopr: fix parsing of empty arguments
Pádraig Brady [Sat, 6 May 2023 10:22:22 +0000 (11:22 +0100)] 
pr: fix parsing of empty arguments

Before:
  $ pr --expand-tabs=
  pr: '-e' extra characters or invalid number in the argument:
   ‘SHELL=/bin/bash’: Value too large for defined data type

After:
  $ pr --expand-tabs=
  pr: '-e': Invalid argument: ‘’

* src/pr.c (getoptarg): Ensure we don't parse beyond the
end of an empty argument, thus outputting arbitrary stack
info in subsequent error messages.

Addresses https://bugs.debian.org/1035596

2 years agocp: -p --parents: minor cleanup of previous patch
Paul Eggert [Fri, 5 May 2023 18:03:25 +0000 (11:03 -0700)] 
cp: -p --parents: minor cleanup of previous patch

This doesn’t change behavior; it just clarifies the code a bit.
* src/cp.c (re_protect): New arg DST_SRC_NAME, for clarity, and so
that we need to skip '/'s only once.  Caller changed.
Rename a couple of local variables to try to make things clearer.

2 years agocp: -p --parents: fix failure to preserve permissions for absolute paths
Pádraig Brady [Wed, 3 May 2023 16:01:37 +0000 (17:01 +0100)] 
cp: -p --parents: fix failure to preserve permissions for absolute paths

* src/cp.c (re_protect): Ensure copy_acl() is passed an absolute path.
* tests/cp/cp-parents.sh: Add a test case.
* NEWS: Mention the bug.
Fixes https://bugs.gnu.org/63245

2 years agotests: provide more info on DEBUG=yes
Pádraig Brady [Tue, 2 May 2023 21:39:03 +0000 (22:39 +0100)] 
tests: provide more info on DEBUG=yes

* README: State that DEBUG=yes is particularly useful with perl tests.
* tests/split/l-chunk.sh: Use the more standard $DEBUG variable
rather than an internal $DEBUGGING variable.

2 years agodoc: provide more info on the default 32-bit cksum digest
Pádraig Brady [Sun, 30 Apr 2023 21:10:25 +0000 (22:10 +0100)] 
doc: provide more info on the default 32-bit cksum digest

* doc/coreutils.texi (cksum invocation): Say that the default
digest format is 32-bit and based on the Ethernet standard CRC.

2 years agomaint: remove redundant exit status handling
Pádraig Brady [Sun, 30 Apr 2023 12:05:12 +0000 (13:05 +0100)] 
maint: remove redundant exit status handling

* src/numfmt.c: Remove redundant / confusing
use of TIMEOUT_FAILURE.

2 years agomaint: simplify --enable-gcc-warnings='expensive'
Paul Eggert [Thu, 27 Apr 2023 00:14:54 +0000 (17:14 -0700)] 
maint: simplify --enable-gcc-warnings='expensive'

* configure.ac (WERROR_CFLAGS): Omit mention of
-Wno-analyzer-double-free, -Wno-analyzer-null-dereference, and
-Wno-analyzer-use-after-free as manywarnings no longer uses them.

2 years agomaint: suppress GCC 13 false alarms
Paul Eggert [Thu, 27 Apr 2023 00:14:54 +0000 (17:14 -0700)] 
maint: suppress GCC 13 false alarms

* src/csplit.c, src/fmt.c, src/make-prime-list.c, src/nohup.c:
Add pragmas to pacify GCC 13 when coreutils is configured
with --enable-gcc-warnings='expensive'.

2 years agochmod: pacify GCC 13
Paul Eggert [Thu, 27 Apr 2023 00:14:54 +0000 (17:14 -0700)] 
chmod: pacify GCC 13

* src/chmod.c (main): Use xpalloc instead of X2REALLOC,
and make the corresponding variables signed instead of unsigned.
When reallocating the buffer, this grows it by a factor of 1.5, not 2.
This also pacifies gcc -Wanalyzer-null-dereference.

2 years agocsplit: pacify GCC 13
Paul Eggert [Thu, 27 Apr 2023 00:14:54 +0000 (17:14 -0700)] 
csplit: pacify GCC 13

* src/csplit.c (load_buffer): Refactor for clarity.
This also xpacifies gcc -Wanalyzer-use-of-uninitialized-value.
When reallocating the buffer, grow it by a factor of 1.5, not 2.

2 years agobuild: update gnulib submodule to latest
Paul Eggert [Thu, 27 Apr 2023 00:14:54 +0000 (17:14 -0700)] 
build: update gnulib submodule to latest

2 years agotests: more cases for read input diagnostics
Pádraig Brady [Wed, 26 Apr 2023 15:20:50 +0000 (16:20 +0100)] 
tests: more cases for read input diagnostics

* tests/misc/read-errors.sh: Exercise more modes of
various utilities for better read error coverage.
* tests/split/fail.sh: Remove part refactored into the above test.

2 years agouniq: be more specific when diagnosing read errors
Pádraig Brady [Wed, 26 Apr 2023 14:20:47 +0000 (15:20 +0100)] 
uniq: be more specific when diagnosing read errors

* src/uniq.c (check_file): Use the errno when diagnosing read errors.

2 years agobuild: fix build with -mno-ssse3
Jaroslav Skarvada [Wed, 26 Apr 2023 12:48:41 +0000 (13:48 +0100)] 
build: fix build with -mno-ssse3

Avoid the following error with -mno-ssse3:
 inlining failed in call to 'always_inline' '_mm_shuffle_epi8':
 target specific option mismatch

* configure.ac: Ensure we use ssse3 specific code when
checking whether to enable the pclmul cksum implementation.

2 years agopr: fix infinite loop when double spacing
Pádraig Brady [Tue, 25 Apr 2023 13:07:03 +0000 (14:07 +0100)] 
pr: fix infinite loop when double spacing

* src/pr.c (init_parameters): Ensure we avoid a 0 lines_per_body
which was possible when adjusting for double spacing.
That caused print_page() to always return true,
causing an infinite loop.
* tests/pr/pr-tests.pl: Add a test case.
* NEWS: Mention the fix.
Fixes https://bugs.debian.org/1034808

2 years agocopy: reduce verbosity of -i and -u with --verbose
Pádraig Brady [Tue, 25 Apr 2023 10:07:36 +0000 (11:07 +0100)] 
copy: reduce verbosity of -i and -u with --verbose

Since skipping of files is central to the operation of -i and -u,
and with -u one may be updating few files out of many,
reinstate the verbosity of this functionality as it was before 9.3.

* src/copy.c (copy_internal): Only output "skipped" message
with --debug.  Also adjust so message never changes with --debug.
* tests/cp/cp-i.sh: Adjust accordingly.
* tests/mv/mv-n.sh: Likewise.
* tests/cp/debug.sh: Add explicit test case for message.
* NEWS: Mention the change in behavior.

2 years agotests: ensure all utilities that read input diagnose errors
Pádraig Brady [Sat, 22 Apr 2023 20:35:23 +0000 (21:35 +0100)] 
tests: ensure all utilities that read input diagnose errors

* tests/misc/read-errors.sh: Add a new test.
* tests/misc/date-f.sh: Remove unneeded test.
* tests/misc/dircolors.sh: Likewise.
* tests/local.mk: Reference new test, and dereference removed ones.

2 years agofactor: diagnose errors reading the input
Pádraig Brady [Sun, 23 Apr 2023 22:45:08 +0000 (23:45 +0100)] 
factor: diagnose errors reading the input

* src/factor.c (do_stdin): Exit with failure upon read errors.
* NEWS: Mention the bug fix.

2 years agonumfmt: diagnose errors reading the input
Pádraig Brady [Sat, 22 Apr 2023 20:48:51 +0000 (21:48 +0100)] 
numfmt: diagnose errors reading the input

* src/numfmt.c (main): Exit with failure upon read errors.
* NEWS: Mention the bug fix.