Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package coreutils for openSUSE:Factory 
checked in at 2026-09-24 22:55:05
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/coreutils (Old)
 and      /work/SRC/openSUSE:Factory/.coreutils.new.383539 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "coreutils"

Thu Sep 24 22:55:05 2026 rev:176 rq:1379719 version:9.12

Changes:
--------
--- /work/SRC/openSUSE:Factory/coreutils/coreutils.changes      2026-09-12 
21:15:09.743005876 +0200
+++ /work/SRC/openSUSE:Factory/.coreutils.new.383539/coreutils.changes  
2026-09-24 22:55:07.704364292 +0200
@@ -1,0 +2,155 @@
+Tue Sep 22 06:22:22 UTC 2026 - Bernhard Voelker <[email protected]>
+
+- coreutils-9.12-env-quote-fix.patch: Add post-release upstream patch
+  to revert env(1) behavior, i.e., only quote when outputting to terminals.
+- coreutils-i18n.patch: Sync with Fedora.
+  * src/linebuffer.h: Remove unnecessary hunk.
+  Avoid false-positives in French locale:
+  * tests/Coreutils.pm: Adjust test name length for "-mb" suffix.
+  * tests/pr/pr-tests.pl: Skip "neg-page" test.
+  * tests/sort/sort.pl: Skip "invalid-parallel" test.
+
+-------------------------------------------------------------------
+Thu Sep 17 06:33:14 UTC 2026 - Bernhard Voelker <[email protected]>
+
+- Update to 9.12:
+  Bug fixes
+  * 'chcon', 'chgrp', 'chmod', 'chown', 'du', 'ls' which traverse hierarchies 
with
+    -R,  no longer fail merely because files may be being removed in parallel.
+    [This bug was present in "the beginning".]
+  * 'comm - -' no longer closes standard input twice.  Previously it would
+    mistakenly exit with a nonzero status.
+    [This bug was present in "the beginning".]
+  * 'cp', 'install', and 'mv' now fall back to a standard copy
+    if a --reflink=auto clone fails due to EDQUOT, ENOMEM, or ENOSPC.
+    E.g., with XFS, a clone can exhaust metadata space in an allocation
+    group, while a standard copy works.
+    [bug introduced in coreutils-9.2]
+  * 'cut -d' with multiple multi-byte delimiter options specified
+    will correctly match the last delimiter specified.
+    [bug introduced with multi-byte support in coreutils-9.11]
+  * 'date -d '1-2-3' "+%_D"' no longer propagates flags like _ and - to the 
year
+    component of the %D date specifier, keeping consistent component 
formatting.
+    [bug introduced in coreutils-8.31]
+  * 'du --max-depth=N' now exits with a nonzero exit status and an error 
message
+    if N is negative.  Previously it behaved as if N were zero.
+    [bug introduced in coreutils-9.4]
+  * 'factor' avoids a buffer over-read (CWE-126) for certain values.
+    [bug introduced in coreutils-9.8]
+  * 'head' and 'tail' now quote names in file headers when needed.
+    [This bug was present in "the beginning".]
+  * 'ls --color' no longer reads freed memory when LS_COLORS sets "ln=target"
+    and later becomes unparsable, e.g., LS_COLORS='ln=target:x'.
+    [This bug was present in "the beginning".]
+  * 'mv' now warns when copying extended attributes fails with ENOTSUP, e.g., 
when
+    moving files to a file system that does not support them.
+    [bug introduced in coreutils-7.3]
+  * 'numfmt', 'printf', and 'seq' on Solaris, no longer output an extraneous 
e+00
+    when using a large precision like "%.5119f".
+    [This bug was present in "the beginning".]
+  * 'pinky -l' no longer no longer prints output in the incorrect order when
+    standard output is fully buffered, e.g., when redirected to a file.
+    [bug introduced in coreutils-9.10]
+  * 'pr' now exits gracefully upon exceeding internal accounting limits,
+    like when processing large tab stops.
+    [This bug was present in "the beginning".]
+  * 'ptx -G' no longer loops forever when the output width is smaller than
+    twice the gap size, as with 'ptx -G -w4', or when a long reference
+    leaves that little room, as with 'ptx -G -r'.
+    [This bug was present in "the beginning".]
+  * 'ptx -W' no longer loops forever with a word regular expression that can
+    match the empty string, like: echo ab | ptx -W 'a*'.
+    [This bug was present in "the beginning".]
+  * 'shred' no longer blocks when opening a FIFO that has no readers.
+    [This bug was present in "the beginning".]
+  * 'stty' no longer fails when the system uses speed encodings that
+    are variations of the requested speed.
+    [bug introduced in coreutils-9.8]
+  * 'tee' no longer loops infinitely after writing all output if a write call 
sets
+    errno to EAGAIN.
+    [bug introduced in coreutils-9.11]
+  * 'tee' no longer treats short writes as errors.
+    [bug introduced in coreutils-9.11]
+  * 'test' no longer treats '-a' and '-o' as operators when given as strings 
to a
+    binary operator.  E.g., 'test -a -a -a' exits successfully instead of 
exiting
+    with an error.
+    [This bug was present in "the beginning".]
+  * 'truncate --reference=R' no longer hangs when R is a FIFO with no readers.
+    [bug introduced in coreutils-8.17]
+  * 'unexpand -t' no longer overflows a heap buffer, for tab values > 
SIZE_MAX/16,
+    or with multi-byte blank characters longer than the tab value.
+    [bugs introduced in coreutils-9.11]
+  * 'uniq -w' no longer overruns the read buffer in multibyte locales.
+    [bug introduced in coreutils-9.5]
+  * 'wc' no longer reads past the end of a lookup table in legacy multibyte
+    locales like SHIFT-JIS where a single byte can decode to a wide character.
+    [bug introduced in coreutils-9.5]
+  * Messages from Gnulib are no longer mistranslated in non-English locales.
+    [bug introduced in coreutils-9.6]
+  New Features
+  * 'env' now supports --env0-from=FILE to read NUL-delimited environment 
entries
+    from a file.  With -i, entries are preserved exactly, allowing full
+    round-tripping of environments containing duplicate or nonstandard entries.
+  * 'stat' and 'tail' now know about the "failfs" and "nullfs" file system 
types.
+    stat -f -c%T now reports the file system type,
+    and tail -f uses inotify for these file systems.
+  * uname adds the -A,--all-labeled option to label all output, one item per 
line.
+  Changes in behavior
+  * 'env' and 'printenv' now quote printed environment variables honoring the
+    QUOTING_STYLE environment variable, defaulting to shell-escape style. This
+    avoids printing arbitrary data to the terminal and allows the output to be
+    sourced by a POSIX shell.
+  * 'ls' -w,--width no longer includes '\n' in the width of a line.
+    I.e., the width or $COLUMNS is interpreted to be an _inclusive_ maximum.
+  * 'stat' now uses shell quoting when required, to more robustly escape
+    file names.  Previously it only quoted file names with the %N format.
+    The default quoting honors the QUOTING_STYLE env variable (like %N).
+    Also %Qn is a newly supported format combination to quote file names,
+    leaving the existing %n format for when quoting is not desired.
+  Improvements
+  * When built with the configure option '--with-wtmpdb', invocations of
+    'who /var/log/wtmp' and 'users /var/log/wtmp' use the wtmpdb database
+    instead of the file /var/log/wtmp.  This makes them Y2038-safe.
+  * 'cut -w' operates more efficiently when extracting the start of a line
+    in multi-byte locales, giving 4x more throughput with typical input.
+  * 'df', 'du', 'ls', 'od', 'pr', and 'sort' now escape invalid arguments in 
error
+    messages for options expecting an integer.
+  * 'env -0, and 'printenv -0' now explicitly set binary mode on output
+    so that no CRLF translation is done e.g., on windows.
+  * 'install -C' will now avoid updating file metadata when the destination
+    already has the appropriate ownership and permissions.
+  * 'basename', 'dirname', 'du', 'readlink', and 'realpath' now quote output in
+    shell-escape style when standard output is a terminal.  The QUOTING_STYLE
+    environment variable can be used to adjust or disable the quoting.
+  * 'ls -m' now quotes files names containing commas when appropriate,
+    so users can better distinguish separating commas.
+  * 'ls' now replaces newlines in file names if ambiguous with separators.
+    Previously newlines were protected only when outputting to a terminal.
+  * 'sort' will now better use available memory and parallel operation
+    when reading from unknown sized inputs like pipes.
+  * 'uniq -c' now operates up to 2.5x times faster on systems with unlocked 
stdio
+    functions.
+  Build-related
+  * 'logname' now builds, where getlogin() is replaced (e.g. with musl),
+     and systemd libs are being used, by linking the required libraries.
+  * The multi-call binary built with configure --enable-single-binary is 
reduced
+    in size by around 10KB through the more efficient reuse of the 'test' code
+    by '[', and the 'true' code by 'false'.
+  * configure no longer accepts the --with-linux-crypto option, which allowed
+    cksum, md5sum, and sha*sum to use the Linux AF_ALG API.  This API will be
+    deprecated in Linux 7.2 and is less performant than OpenSSL.
+  * The configure option '--enable-systemd' is renamed to '--with-systemd'.
+    The option '--enable-systemd' was a misnomer and is now deprecated.
+  * The 'sort' binary now uses the UAPI Group's .note.dlopen ELF note
+    to indicate its dependency on libcrypto.
+- coreutils.spec (%build): Change configure option from --enable-systemd
+  to --with-systemd.
+- coreutils-tests-misc-tty-eof-avoid-false-failure.patch:
+  Remove now-obsolete patch.
+- coreutils-tee-fix-infloop-on-EAGAIN-and-short-write.patch,
+  coreutils-uniq-fix-read-overrun-with-w.patch,
+  coreutils-unexpand-fix-heap-overflow.patch:
+  Remove now-upstream patches.
+- Refresh all other patches.
+
+-------------------------------------------------------------------

Old:
----
  coreutils-9.11.tar.xz
  coreutils-9.11.tar.xz.sig
  coreutils-tee-fix-infloop-on-EAGAIN-and-short-write.patch
  coreutils-tests-misc-tty-eof-avoid-false-failure.patch
  coreutils-unexpand-fix-heap-overflow.patch
  coreutils-uniq-fix-read-overrun-with-w.patch

New:
----
  coreutils-9.12-env-quote-fix.patch
  coreutils-9.12.tar.xz
  coreutils-9.12.tar.xz.sig

----------(Old B)----------
  Old:  Remove now-obsolete patch.
- coreutils-tee-fix-infloop-on-EAGAIN-and-short-write.patch,
  coreutils-uniq-fix-read-overrun-with-w.patch,
  Old:  to --with-systemd.
- coreutils-tests-misc-tty-eof-avoid-false-failure.patch:
  Remove now-obsolete patch.
  Old:  coreutils-uniq-fix-read-overrun-with-w.patch,
  coreutils-unexpand-fix-heap-overflow.patch:
  Remove now-upstream patches.
  Old:- coreutils-tee-fix-infloop-on-EAGAIN-and-short-write.patch,
  coreutils-uniq-fix-read-overrun-with-w.patch,
  coreutils-unexpand-fix-heap-overflow.patch:
----------(Old E)----------

----------(New B)----------
  New:
- coreutils-9.12-env-quote-fix.patch: Add post-release upstream patch
  to revert env(1) behavior, i.e., only quote when outputting to terminals.
----------(New E)----------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ coreutils.spec ++++++
--- /var/tmp/diff_new_pack.fq60oX/_old  2026-09-24 22:55:08.776409093 +0200
+++ /var/tmp/diff_new_pack.fq60oX/_new  2026-09-24 22:55:08.778409177 +0200
@@ -30,7 +30,7 @@
 %global psuffix %{nil}
 %endif
 Name:           coreutils%{?psuffix}
-Version:        9.11
+Version:        9.12
 Release:        0
 Summary:        GNU Core Utilities
 License:        GPL-3.0-or-later
@@ -63,15 +63,10 @@
 # tests: skip tests/rm/ext3-perf.sh temporarily as it hangs on OBS.
 Patch810:       coreutils-skip-tests-rm-ext3-perf.patch
 Patch900:       coreutils-tests-workaround-make-fdleak.patch
-Patch901:       coreutils-tests-misc-tty-eof-avoid-false-failure.patch
 Patch902:       coreutils-tests-df-sync-fix-strace.patch
-
-# Upstream fix for bsc#1265378
-Patch920:       coreutils-tee-fix-infloop-on-EAGAIN-and-short-write.patch
-# Upstream security fix for CVE-2026-56391 / bsc#1272698
-Patch922:       coreutils-uniq-fix-read-overrun-with-w.patch
-# Upstream security fix for CVE-2026-56392 / bsc#1272699
-Patch923:       coreutils-unexpand-fix-heap-overflow.patch
+# Post-release upstream patch to revert env(1) behavior, i.e., only quote when
+# outputting to terminals.
+Patch910:       coreutils-9.12-env-quote-fix.patch
 
 BuildRequires:  automake
 BuildRequires:  gmp-devel
@@ -187,11 +182,9 @@
 
 %patch -P 810
 %patch -P 900
-%patch -P 901 -p 1
-%patch -P 902 -p 1
-%patch -P 920 -p 1
-%patch -P 922 -p 1
-%patch -P 923 -p 1
+%patch -P 902
+
+%patch -P 910
 
 # ================================================
 %build
@@ -208,7 +201,7 @@
            --without-gmp \
 %endif
 %if "%{name}" == "coreutils-systemd"
-           --enable-systemd \
+           --with-systemd \
 %endif
            DEFAULT_POSIX2_VERSION=200112 \
            alternative=199209

++++++ coreutils-9.12-env-quote-fix.patch ++++++
>From 782a1e5bc2090212273bb731dceee2cc2a071e54 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <[email protected]>
Date: Tue, 15 Sep 2026 20:26:28 +0100
Subject: [PATCH] env,printenv: only quote when outputting to terminals

To support albeit non-robust but existing use cases like:

  env | grep SPARK_JAVA_OPT_ | sort -t_ -k4 -n |
   sed 's/[^=]*=\(.*\)/\1/g' > java_opts.txt
  readarray -t SPARK_EXECUTOR_JAVA_OPTS < java_opts.txt
  ...
  CMD=("${JAVA_HOME}/bin/java" "${SPARK_EXECUTOR_JAVA_OPTS[@]}" ...)

* src/env.c (main): Restrict quoting to terminals.
* src/printenv.c (main): Likewise.
* tests/env/env.sh: Adjust accordingly.
* tests/misc/printenv.sh: Likewise.
* doc/coreutils.texi: Likewise.

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

(cherry picked from commit 782a1e5bc2090212273bb731dceee2cc2a071e54)
---
 doc/coreutils.texi     |   16 ++++++----------
 src/env.c              |    2 +-
 src/printenv.c         |    2 +-
 tests/env/env.sh       |   31 +++++++------------------------
 tests/misc/printenv.sh |   40 ++++------------------------------------
 5 files changed, 19 insertions(+), 72 deletions(-)

Index: doc/coreutils.texi
===================================================================
--- doc/coreutils.texi.orig
+++ doc/coreutils.texi
@@ -15511,13 +15511,9 @@ The program accepts the following option
 
 @end table
 
-If no @var{variable}s are specified, @command{printenv} quotes
+If standard output is a terminal @command{printenv} quotes
 environment variables and their values using the @samp{shell-escape}
-style.  If @var{variable}s are specified, @command{printenv} only quotes
-their values using the @samp{shell-escape} style if standard output is a
-terminal.
-
-The environment variable @env{QUOTING_STYLE}
+style by default. The environment variable @env{QUOTING_STYLE}
 specifies the quoting style.  Valid quoting styles are:
 @quotingStyles
 
@@ -17460,10 +17456,10 @@ If no command name is specified followin
 specifications, the resulting environment is printed.  This is like
 specifying the @command{printenv} program.
 
-The printed environment variables and their values are quoted using the
-@samp{shell-escape} style.   The environment variable
-@env{QUOTING_STYLE} specifies the quoting style.  Valid quoting styles
-are:
+If standard output is a terminal, the printed environment variables
+and their values are quoted using the @samp{shell-escape} style by default.
+The environment variable @env{QUOTING_STYLE} specifies the quoting style.
+Valid quoting styles are:
 @quotingStyles
 
 For some examples, suppose the environment passed to @command{env}
Index: src/env.c
===================================================================
--- src/env.c.orig
+++ src/env.c
@@ -1113,7 +1113,7 @@ main (int argc, char **argv)
 
   /* Get the value from QUOTING_STYLE before unsetting environment
      variables.  */
-  if (!opt_nul_terminate_output)
+  if (!opt_nul_terminate_output && isatty (STDOUT_FILENO))
     {
       int qs = getenv_quoting_style ();
       if (qs < 0)
Index: src/printenv.c
===================================================================
--- src/printenv.c.orig
+++ src/printenv.c
@@ -113,7 +113,7 @@ main (int argc, char **argv)
   bool quote_output = false;
   idx_t const n_args = argc - optind;
 
-  if (!opt_nul_terminate_output && (n_args <= 0 || isatty (STDOUT_FILENO)))
+  if (!opt_nul_terminate_output && isatty (STDOUT_FILENO))
     {
       int qs = getenv_quoting_style ();
       if (qs < 0)
Index: tests/env/env.sh
===================================================================
--- tests/env/env.sh.orig
+++ tests/env/env.sh
@@ -91,18 +91,14 @@ EOF
 compare exp out || fail=1
 
 # env shouldn't care what encoding name or value is
-cat <<\EOF >exp || framework_failure_
-NON_UTF8_TEST=''$'\240'
-EOF
+printf 'NON_UTF8_TEST=\240\n' > exp || framework_failure_
 env $(printf 'NON_UTF8_TEST=\240') env > all || fail=1
 grep '^NON_UTF8_TEST' all | LC_ALL=C sort > out || framework_failure_
 compare exp out || fail=1
 
-cat <<\EOF >exp || framework_failure_
-'NON_UTF8_TEST'$'\240'=1
-EOF
+printf 'NON_UTF8_TEST\240=1\n' > exp || framework_failure_
 env $(printf 'NON_UTF8_TEST\240=1') env > all || fail=1
-grep "^'NON_UTF8_TEST" all | LC_ALL=C sort > out || framework_failure_
+grep "^NON_UTF8_TEST" all | LC_ALL=C sort > out || framework_failure_
 compare exp out || fail=1
 
 # PATH modifications affect exec.
@@ -193,29 +189,16 @@ EOF
 compare err_exp err || fail=1
 done
 
-# QUOTING_STYLE affects redirected output.
-cat <<\EOF >exp-noargs-literal || framework_failure_
-a b=c d
-EOF
-cat <<\EOF >exp-noargs-shell || framework_failure_
-'a b'='c d'
-EOF
-tr "'" '"' <exp-noargs-shell >exp-noargs-c || framework_failure_
-for qs in literal shell c; do
+# QUOTING_STYLE does not affect redirected output.
+printf '%s\n' 'a b=c d' > exp || framework_failure_
+for qs in literal shell-always invalid; do
   env -i PATH="$PATH" QUOTING_STYLE=$qs 'a b'='c d' \
     env >out-t 2>err || fail=1
   grep -vE '^["'"'"']?'\
 '(__CF_USER_TEXT_ENCODING|QUOTING_STYLE|(LD_ORIGIN_)?PATH)["'"'"']?=' \
     out-t >out || framework_failure_
-  compare exp-noargs-$qs out || fail=1
+  compare exp out || fail=1
   compare /dev/null err || fail=1
 done
 
-# Check the behavior with an invalid value for QUOTING_STYLE.
-printf 'env: ignoring invalid value of environment variable %s\n' \
-  "QUOTING_STYLE: 'invalid'" >exp || framework_failure_
-env QUOTING_STYLE=invalid env >out 2>err || fail=1
-grep '^QUOTING_STYLE=invalid$' out || fail=1
-compare exp err || fail=1
-
 Exit $fail
Index: tests/misc/printenv.sh
===================================================================
--- tests/misc/printenv.sh.orig
+++ tests/misc/printenv.sh
@@ -80,48 +80,16 @@ compare exp out || fail=1
 returns_ 1 env a=b=c printenv a=b > out || fail=1
 compare /dev/null out || fail=1
 
-# QUOTING_STYLE affects redirected output.
-cat <<\EOF >exp-noargs-literal || framework_failure_
-a b=c d
-EOF
-cat <<\EOF >exp-arg-literal || framework_failure_
-c d
-EOF
-cat <<\EOF >exp-args-literal || framework_failure_
-c d
-c d
-EOF
-cat <<\EOF >exp-noargs-shell || framework_failure_
-'a b'='c d'
-EOF
-cp exp-arg-literal exp-arg-shell &&
-cp exp-args-literal exp-args-shell || framework_failure_
-for t in noargs arg args; do
-  tr "'" '"' <exp-$t-shell >exp-$t-c || framework_failure_
-done
-for qs in literal shell c; do
+# QUOTING_STYLE does not affect redirected output.
+printf '%s\n' 'a b=c d' > exp || framework_failure_
+for qs in literal shell-always invalid; do
   env -i PATH="$PATH" QUOTING_STYLE=$qs 'a b'='c d' \
     printenv >out-t 2>err || fail=1
   grep -vE '^["'"'"']?'\
 '(__CF_USER_TEXT_ENCODING|QUOTING_STYLE|(LD_ORIGIN_)?PATH)["'"'"']?=' \
     out-t >out || framework_failure_
-  compare exp-noargs-$qs out || fail=1
-  compare /dev/null err || fail=1
-  env -i PATH="$PATH" QUOTING_STYLE=$qs 'a b'='c d' \
-    printenv 'a b' >out 2>err || fail=1
-  compare exp-arg-$qs out || fail=1
-  compare /dev/null err || fail=1
-  env -i PATH="$PATH" QUOTING_STYLE=$qs 'a b'='c d' \
-    printenv 'a b' 'a b' >out 2>err || fail=1
-  compare exp-args-$qs out || fail=1
+  compare exp out || fail=1
   compare /dev/null err || fail=1
 done
 
-# Check the behavior with an invalid value for QUOTING_STYLE.
-printf 'printenv: ignoring invalid value of environment variable %s\n' \
-  "QUOTING_STYLE: 'invalid'" >exp || framework_failure_
-env QUOTING_STYLE=invalid printenv >out 2>err || fail=1
-grep '^QUOTING_STYLE=invalid$' out || fail=1
-compare exp err || fail=1
-
 Exit $fail

++++++ coreutils-9.11.tar.xz -> coreutils-9.12.tar.xz ++++++
/work/SRC/openSUSE:Factory/coreutils/coreutils-9.11.tar.xz 
/work/SRC/openSUSE:Factory/.coreutils.new.383539/coreutils-9.12.tar.xz differ: 
char 15, line 1

++++++ coreutils-disable_tests.patch ++++++
--- /var/tmp/diff_new_pack.fq60oX/_old  2026-09-24 22:55:08.876413272 +0200
+++ /var/tmp/diff_new_pack.fq60oX/_new  2026-09-24 22:55:08.878413356 +0200
@@ -6,7 +6,7 @@
 ===================================================================
 --- gnulib-tests/gnulib.mk.orig
 +++ gnulib-tests/gnulib.mk
-@@ -1580,10 +1580,10 @@ EXTRA_DIST += test-getloadavg.c signatur
+@@ -1604,10 +1604,10 @@ EXTRA_DIST += test-getloadavg.c signatur
  
  ## begin gnulib module getlogin-tests
  

++++++ coreutils-i18n.patch ++++++
--- /var/tmp/diff_new_pack.fq60oX/_old  2026-09-24 22:55:08.889413816 +0200
+++ /var/tmp/diff_new_pack.fq60oX/_new  2026-09-24 22:55:08.892413941 +0200
@@ -4,50 +4,17 @@
 Subject: [PATCH] coreutils-i18n.patch
 
 ---
- lib/linebuffer.h            |    8 
  src/pr.c                    |  443 ++++++++++++++++++++++--
  src/sort.c                  |  791 
+++++++++++++++++++++++++++++++++++++++++---
+ tests/Coreutils.pm          |    3 
  tests/i18n/sort.sh          |   29 +
  tests/local.mk              |    2 
  tests/misc/sort-mb-tests.sh |   45 ++
  tests/pr/pr-tests.pl        |   49 ++
  tests/sort/sort-merge.pl    |   42 ++
  tests/sort/sort.pl          |   40 ++
- 9 files changed, 1355 insertions(+), 94 deletions(-)
- create mode 100644 lib/mbfile.c
- create mode 100644 lib/mbfile.h
- create mode 100644 m4/mbfile.m4
- create mode 100755 tests/expand/mb.sh
- create mode 100755 tests/i18n/sort.sh
- create mode 100755 tests/misc/sort-mb-tests.sh
- create mode 100755 tests/unexpand/mb.sh
+ 9 files changed, 1350 insertions(+), 94 deletions(-)
 
-Index: lib/linebuffer.h
-===================================================================
---- lib/linebuffer.h.orig
-+++ lib/linebuffer.h
-@@ -27,6 +27,11 @@ extern "C" {
- #endif
- 
- 
-+/* Get mbstate_t.  */
-+# if HAVE_WCHAR_H
-+#  include <wchar.h>
-+# endif
-+
- /* A 'struct linebuffer' holds a line of text. */
- 
- struct linebuffer
-@@ -34,6 +39,9 @@ struct linebuffer
-   idx_t size;                  /* Allocated. */
-   idx_t length;                /* Used. */
-   char *buffer;
-+# if HAVE_WCHAR_H
-+  mbstate_t state;
-+# endif
- };
- 
- /* Initialize linebuffer LINEBUFFER for use. */
 Index: src/pr.c
 ===================================================================
 --- src/pr.c.orig
@@ -654,7 +621,7 @@
      {
        width = TAB_WIDTH (chars_per_c, input_position);
  
-@@ -2737,6 +2936,164 @@ char_to_clump (char c)
+@@ -2740,6 +2939,164 @@ char_to_clump (char c)
    return chars;
  }
  
@@ -880,7 +847,7 @@
  /* The kind of blanks for '-b' to skip in various options. */
  enum blanktype { bl_start, bl_end, bl_both };
  
-@@ -333,13 +367,11 @@ static bool stable;
+@@ -343,13 +377,11 @@ static bool stable;
  /* An int value outside char range.  */
  enum { NON_CHAR = CHAR_MAX + 1 };
  
@@ -897,7 +864,7 @@
  
  /* Flag to remove consecutive duplicate lines from the output.
     Only the last of a sequence of equal lines will be output. */
-@@ -375,6 +407,46 @@ struct tempnode
+@@ -385,6 +417,46 @@ struct tempnode
  static struct tempnode *volatile temphead;
  static struct tempnode *volatile *temptail = &temphead;
  
@@ -944,7 +911,7 @@
  /* Clean up any remaining temporary files.  */
  
  static void
-@@ -1382,7 +1454,7 @@ zaptemp (char const *name)
+@@ -1392,7 +1464,7 @@ zaptemp (char const *name)
    free (node);
  }
  
@@ -953,7 +920,7 @@
  
  static int
  struct_month_cmp (void const *m1, void const *m2)
-@@ -1397,7 +1469,7 @@ struct_month_cmp (void const *m1, void c
+@@ -1407,7 +1479,7 @@ struct_month_cmp (void const *m1, void c
  /* Initialize the character class tables. */
  
  static void
@@ -962,7 +929,7 @@
  {
    for (size_t i = 0; i < UCHAR_LIM; ++i)
      {
-@@ -1407,7 +1479,7 @@ inittables (void)
+@@ -1417,7 +1489,7 @@ inittables (void)
        fold_toupper[i] = toupper (i);
      }
  
@@ -971,7 +938,7 @@
    /* If we're not in the "C" locale, read different names for months.  */
    if (hard_LC_TIME)
      {
-@@ -1487,6 +1559,84 @@ specify_nmerge (int oi, char c, char con
+@@ -1497,6 +1569,84 @@ specify_nmerge (int oi, char c, char con
      xstrtol_fatal (e, oi, c, long_options, s);
  }
  
@@ -1056,7 +1023,7 @@
  /* Specify the amount of main memory to use when sorting.  */
  static void
  specify_sort_size (int oi, char c, char const *s)
-@@ -1713,7 +1863,7 @@ buffer_linelim (struct buffer const *buf
+@@ -1860,7 +2010,7 @@ maybe_growbuf (struct buffer *buf, struc
     by KEY in LINE. */
  
  static char *
@@ -1065,7 +1032,7 @@
  {
    char *ptr = line->text, *lim = ptr + line->length - 1;
    size_t sword = key->sword;
-@@ -1722,10 +1872,10 @@ begfield (struct line const *line, struc
+@@ -1869,10 +2019,10 @@ begfield (struct line const *line, struc
    /* The leading field separator itself is included in a field when -t
       is absent.  */
  
@@ -1078,7 +1045,7 @@
          ptr = sep ? sep : lim;
          if (ptr < lim)
            ++ptr;
-@@ -1755,12 +1905,71 @@ begfield (struct line const *line, struc
+@@ -1902,12 +2052,71 @@ begfield (struct line const *line, struc
    return ptr;
  }
  
@@ -1151,7 +1118,7 @@
  {
    char *ptr = line->text, *lim = ptr + line->length - 1;
    size_t eword = key->eword, echar = key->echar;
-@@ -1775,10 +1984,10 @@ limfield (struct line const *line, struc
+@@ -1922,10 +2131,10 @@ limfield (struct line const *line, struc
       'beginning' is the first character following the delimiting TAB.
       Otherwise, leave PTR pointing at the first 'blank' character after
       the preceding field.  */
@@ -1164,7 +1131,7 @@
          ptr = sep ? sep : lim;
          if (ptr < lim && (eword || echar))
            ++ptr;
-@@ -1824,10 +2033,10 @@ limfield (struct line const *line, struc
+@@ -1971,10 +2180,10 @@ limfield (struct line const *line, struc
       */
  
    /* Make LIM point to the end of (one byte past) the current field.  */
@@ -1177,7 +1144,7 @@
        if (newlim)
          lim = newlim;
      }
-@@ -1862,6 +2071,130 @@ limfield (struct line const *line, struc
+@@ -2009,6 +2218,130 @@ limfield (struct line const *line, struc
    return ptr;
  }
  
@@ -1308,7 +1275,7 @@
  /* Fill BUF reading from FP, moving buf->left bytes from the end
     of buf->buf to the beginning first.  If EOF is reached and the
     file wasn't terminated by a newline, supply one.  Set up BUF's line
-@@ -1948,8 +2281,22 @@ fillbuf (struct buffer *buf, FILE *fp, c
+@@ -2096,8 +2429,22 @@ fillbuf (struct buffer *buf, FILE *fp, c
                    else
                      {
                        if (key->skipsblanks)
@@ -1333,7 +1300,7 @@
                        line->keybeg = line_start;
                      }
                  }
-@@ -2087,12 +2434,10 @@ find_unit_order (char const *number)
+@@ -2237,12 +2584,10 @@ find_unit_order (char const *number)
  
  ATTRIBUTE_PURE
  static int
@@ -1349,7 +1316,7 @@
  
    int diff = find_unit_order (a) - find_unit_order (b);
    return (diff ? diff : strnumcmp (a, b, decimal_point, thousands_sep));
-@@ -2104,7 +2449,7 @@ human_numcompare (char const *a, char co
+@@ -2254,7 +2599,7 @@ human_numcompare (char const *a, char co
  
  ATTRIBUTE_PURE
  static int
@@ -1358,7 +1325,7 @@
  {
    while (blanks[to_uchar (*a)])
      a++;
-@@ -2114,6 +2459,25 @@ numcompare (char const *a, char const *b
+@@ -2264,6 +2609,25 @@ numcompare (char const *a, char const *b
    return strnumcmp (a, b, decimal_point, thousands_sep);
  }
  
@@ -1384,7 +1351,7 @@
  static int
  nan_compare (long double a, long double b)
  {
-@@ -2155,7 +2519,7 @@ general_numcompare (char const *sa, char
+@@ -2305,7 +2669,7 @@ general_numcompare (char const *sa, char
     Return 0 if the name in S is not recognized.  */
  
  static int
@@ -1393,7 +1360,7 @@
  {
    size_t lo = 0;
    size_t hi = MONTHS_PER_YEAR;
-@@ -2494,15 +2858,14 @@ debug_key (struct line const *line, stru
+@@ -2652,15 +3016,14 @@ debug_key (struct line const *line, stru
            char saved = *lim;
            *lim = '\0';
  
@@ -1411,7 +1378,7 @@
            else if (key->general_numeric)
              ignore_value (strtold (beg, &tighter_lim));
            else if (key->numeric || key->human_numeric)
-@@ -2647,7 +3010,7 @@ key_warnings (struct keyfield const *gke
+@@ -2805,7 +3168,7 @@ key_warnings (struct keyfield const *gke
        /* Warn about significant leading blanks.  */
        bool implicit_skip = key_numeric (key) || key->month;
        bool line_offset = key->eword == 0 && key->echar != 0; /* -k1.x,1.y  */
@@ -1420,7 +1387,7 @@
            && ((!key->skipsblanks && !implicit_skip)
                || (!key->skipsblanks && key->schar)
                || (!key->skipeblanks && key->echar)))
-@@ -2695,9 +3058,9 @@ key_warnings (struct keyfield const *gke
+@@ -2853,9 +3216,9 @@ key_warnings (struct keyfield const *gke
    bool number_locale_warned = false;
    if (basic_numeric_field_span)
      {
@@ -1433,7 +1400,7 @@
          {
            error (0, 0,
                   _("field separator %s is treated as a "
-@@ -2708,9 +3071,9 @@ key_warnings (struct keyfield const *gke
+@@ -2866,9 +3229,9 @@ key_warnings (struct keyfield const *gke
      }
    if (basic_numeric_field_span || general_numeric_field_span)
      {
@@ -1446,7 +1413,7 @@
          {
            error (0, 0,
                   _("field separator %s is treated as a "
-@@ -2718,19 +3081,19 @@ key_warnings (struct keyfield const *gke
+@@ -2876,19 +3239,19 @@ key_warnings (struct keyfield const *gke
                   quote (((char []) {decimal_point, 0})));
            number_locale_warned = true;
          }
@@ -1470,7 +1437,7 @@
          }
      }
  
-@@ -2782,11 +3145,87 @@ diff_reversed (int diff, bool reversed)
+@@ -2940,11 +3303,87 @@ diff_reversed (int diff, bool reversed)
    return reversed ? _GL_CMP (0, diff) : diff;
  }
  
@@ -1559,7 +1526,7 @@
  {
    struct keyfield *key = keylist;
  
-@@ -2867,7 +3306,7 @@ keycompare (struct line const *a, struct
+@@ -3025,7 +3464,7 @@ keycompare (struct line const *a, struct
            else if (key->human_numeric)
              diff = human_numcompare (ta, tb);
            else if (key->month)
@@ -1568,7 +1535,7 @@
            else if (key->random)
              diff = compare_random (ta, tlena, tb, tlenb);
            else if (key->version)
-@@ -2977,6 +3416,211 @@ keycompare (struct line const *a, struct
+@@ -3135,6 +3574,211 @@ keycompare (struct line const *a, struct
    return diff_reversed (diff, key->reverse);
  }
  
@@ -1780,7 +1747,7 @@
  /* Compare two lines A and B, returning negative, zero, or positive
     depending on whether A compares less than, equal to, or greater than B. */
  
-@@ -3004,7 +3648,7 @@ compare (struct line const *a, struct li
+@@ -3162,7 +3806,7 @@ compare (struct line const *a, struct li
      diff = - NONZERO (blen);
    else if (blen == 0)
      diff = 1;
@@ -1789,7 +1756,7 @@
      {
        /* xmemcoll0 is a performance enhancement as
           it will not unconditionally write '\0' after the
-@@ -4382,6 +5026,7 @@ set_ordering (char const *s, struct keyf
+@@ -4547,6 +5191,7 @@ set_ordering (char const *s, struct keyf
            break;
          case 'f':
            key->translate = fold_toupper;
@@ -1797,7 +1764,7 @@
            break;
          case 'g':
            key->general_numeric = true;
-@@ -4461,7 +5106,7 @@ main (int argc, char **argv)
+@@ -4626,7 +5271,7 @@ main (int argc, char **argv)
    initialize_exit_failure (SORT_FAILURE);
  
    hard_LC_COLLATE = hard_locale (LC_COLLATE);
@@ -1806,7 +1773,7 @@
    hard_LC_TIME = hard_locale (LC_TIME);
  #endif
  
-@@ -4484,6 +5129,29 @@ main (int argc, char **argv)
+@@ -4649,6 +5294,29 @@ main (int argc, char **argv)
        thousands_sep = NON_CHAR;
    }
  
@@ -1836,7 +1803,7 @@
    inittables ();
  
    {
-@@ -4729,13 +5397,34 @@ main (int argc, char **argv)
+@@ -4894,13 +5562,34 @@ main (int argc, char **argv)
  
          case 't':
            {
@@ -1875,7 +1842,7 @@
                  else
                    {
                      /* Provoke with 'sort -txx'.  Complain about
-@@ -4746,9 +5435,11 @@ main (int argc, char **argv)
+@@ -4911,9 +5600,11 @@ main (int argc, char **argv)
                             quote (optarg));
                    }
                }
@@ -1889,6 +1856,20 @@
            }
            break;
  
+Index: tests/Coreutils.pm
+===================================================================
+--- tests/Coreutils.pm.orig
++++ tests/Coreutils.pm
+@@ -273,6 +273,9 @@ sub run_tests ($$$$$)
+       # Yes, this is an arbitrary limit.  If it causes trouble,
+       # consider removing it.
+       my $max = 30;
++      # The downstream i18n multi-byte tests have a "-mb" suffix.
++      # Therefore add 3 to the maximum test name length.
++      $max += 3;
+       if ($max < length $test_name)
+         {
+           warn "$program_name: $test_name: test name is too long (> $max)\n";
 Index: tests/i18n/sort.sh
 ===================================================================
 --- /dev/null
@@ -1927,7 +1908,7 @@
 ===================================================================
 --- tests/local.mk.orig
 +++ tests/local.mk
-@@ -435,6 +435,8 @@ all_tests =                                        \
+@@ -456,6 +456,8 @@ all_tests =                                        \
    tests/sort/sort-field-limit.sh              \
    tests/sort/sort-files0-from.pl              \
    tests/sort/sort-float.sh                    \
@@ -2036,7 +2017,7 @@
 +            push @$t, $sub;
 +          }
 +        #temporarily skip some failing tests
-+        next if ($test_name =~ "col-0" or $test_name =~ "col-inval" or 
$test_name =~ "asan1");
++        next if ($test_name =~ "col-0" or $test_name =~ "col-inval" or 
$test_name =~ "asan1" or $test_name =~ "neg-page");
 +        push @new, ["$test_name-mb", @new_t, {ENV => "LC_ALL=$mb_locale"}];
 +      }
 +    push @Tests, @new;
@@ -2075,8 +2056,8 @@
  # three empty files and one that says 'foo'
  my @inputs = (+(map{{IN=> {"empty$_"=> ''}}}1..3), {IN=> {foo=> "foo\n"}});
  
-@@ -77,6 +86,39 @@ my @Tests =
-         {OUT=>$big_input}],
+@@ -87,6 +96,39 @@ my @Tests =
+         {OUT=>$long_lines_in}],
      );
  
 +# Add _POSIX2_VERSION=199209 to the environment of each test
@@ -2136,7 +2117,7 @@
  # Since each test is run with a file name and with redirected stdin,
  # the name in the diagnostic is either the file name or "-".
  # Normalize each diagnostic to use '-'.
-@@ -428,6 +433,38 @@ foreach my $t (@Tests)
+@@ -439,6 +444,38 @@ foreach my $t (@Tests)
        }
    }
  
@@ -2165,7 +2146,7 @@
 +          }
 +        #disable several failing tests until investigation, disable all tests 
with envvars set
 +        next if (grep {ref $_ eq 'HASH' && exists $_->{ENV}} (@new_t));
-+        next if ($test_name =~ "18g" or $test_name =~ "sort-numeric" or 
$test_name =~ "08[ab]" or $test_name =~ "03[def]" or $test_name =~ "h4" or 
$test_name =~ "n1" or $test_name =~ "2[01]a");
++        next if ($test_name =~ "18g" or $test_name =~ "sort-numeric" or 
$test_name =~ "08[ab]" or $test_name =~ "03[def]" or $test_name =~ "h4" or 
$test_name =~ "n1" or $test_name =~ "2[01]a" or $test_name =~ 
"invalid-parallel");
 +        next if ($test_name =~ "11[ab]"); # avoid FP: expected result differs 
to MB result due to collation rules.
 +        push @new, ["$test_name-mb", @new_t, {ENV => "LC_ALL=$mb_locale"}];
 +       }
@@ -2175,7 +2156,7 @@
  @Tests = triple_test \@Tests;
  
  # Remember that triple_test creates from each test with exactly one "IN"
-@@ -437,6 +474,7 @@ foreach my $t (@Tests)
+@@ -448,6 +485,7 @@ foreach my $t (@Tests)
  # Remove the IN_PIPE version of the "output-is-input" test above.
  # The others aren't susceptible because they have three inputs each.
  @Tests = grep {$_->[0] ne 'output-is-input.p'} @Tests;

++++++ coreutils-remove_hostname_documentation.patch ++++++
--- /var/tmp/diff_new_pack.fq60oX/_old  2026-09-24 22:55:08.910414693 +0200
+++ /var/tmp/diff_new_pack.fq60oX/_new  2026-09-24 22:55:08.913414819 +0200
@@ -31,7 +31,7 @@
  * hostid invocation::            Print numeric host identifier
  * uptime invocation::            Print system uptime and load
  
-@@ -15859,7 +15857,6 @@ information.
+@@ -15993,7 +15991,6 @@ information.
  * arch invocation::             Print machine hardware name.
  * nproc invocation::            Print the number of processors.
  * uname invocation::            Print system information.
@@ -39,7 +39,7 @@
  * hostid invocation::           Print numeric host identifier.
  * uptime invocation::           Print system uptime and load.
  @end menu
-@@ -16887,34 +16884,6 @@ Print the kernel version.
+@@ -17026,34 +17023,6 @@ Print the kernel version.
  
  @exitstatus
  

++++++ coreutils-remove_kill_documentation.patch ++++++
--- /var/tmp/diff_new_pack.fq60oX/_old  2026-09-24 22:55:08.925415320 +0200
+++ /var/tmp/diff_new_pack.fq60oX/_new  2026-09-24 22:55:08.928415446 +0200
@@ -33,7 +33,7 @@
  Delaying
  
  * sleep invocation::             Delay for a specified time
-@@ -18299,102 +18293,6 @@ timeout -s INT 5s env --ignore-signal=IN
+@@ -18462,102 +18456,6 @@ timeout -s INT 5s env --ignore-signal=IN
  timeout -s INT -k 3s 5s env --ignore-signal=INT sleep 20
  @end example
  

++++++ coreutils-skip-gnulib-test-tls.patch ++++++
--- /var/tmp/diff_new_pack.fq60oX/_old  2026-09-24 22:55:08.943416072 +0200
+++ /var/tmp/diff_new_pack.fq60oX/_new  2026-09-24 22:55:08.945416156 +0200
@@ -21,7 +21,7 @@
 ===================================================================
 --- gnulib-tests/gnulib.mk.orig
 +++ gnulib-tests/gnulib.mk
-@@ -3851,9 +3851,10 @@ EXTRA_DIST += test-timespec.c macros.h
+@@ -3985,9 +3985,10 @@ EXTRA_DIST += test-timespec.c macros.h
  
  ## begin gnulib module tls-tests
  

++++++ coreutils-sysinfo.patch ++++++
--- /var/tmp/diff_new_pack.fq60oX/_old  2026-09-24 22:55:08.962416867 +0200
+++ /var/tmp/diff_new_pack.fq60oX/_new  2026-09-24 22:55:08.968417117 +0200
@@ -6,7 +6,7 @@
 ===================================================================
 --- src/uname.c.orig
 +++ src/uname.c
-@@ -357,6 +357,36 @@ main (int argc, char **argv)
+@@ -379,6 +379,36 @@ main (int argc, char **argv)
              element = processor;
          }
  #endif
@@ -41,9 +41,9 @@
 +#endif
 +      }
        if (! (toprint == UINT_MAX && element == unknown))
-         print_element (element);
+         print_element (element, _("Processor"));
      }
-@@ -382,6 +412,18 @@ main (int argc, char **argv)
+@@ -404,6 +434,18 @@ main (int argc, char **argv)
              element = hardware_platform;
          }
  #endif
@@ -60,6 +60,6 @@
 +        element = hardware_platform;
 +      }
        if (! (toprint == UINT_MAX && element == unknown))
-         print_element (element);
+         print_element (element, _("Hardware platform"));
      }
 

++++++ coreutils-tests-df-sync-fix-strace.patch ++++++
--- /var/tmp/diff_new_pack.fq60oX/_old  2026-09-24 22:55:08.982417702 +0200
+++ /var/tmp/diff_new_pack.fq60oX/_new  2026-09-24 22:55:08.985417828 +0200
@@ -2,8 +2,10 @@
  tests/df/sync.sh |   15 +++++++++++----
  1 file changed, 11 insertions(+), 4 deletions(-)
 
---- a/tests/df/sync.sh
-+++ b/tests/df/sync.sh
+Index: tests/df/sync.sh
+===================================================================
+--- tests/df/sync.sh.orig
++++ tests/df/sync.sh
 @@ -22,7 +22,9 @@ print_ver_ df
  # This test is marked "very expensive" since calling sync() can take a long
  # time on a busy system.

++++++ coreutils-tests-shorten-extreme-factor-tests.patch ++++++
--- /var/tmp/diff_new_pack.fq60oX/_old  2026-09-24 22:55:08.996418287 +0200
+++ /var/tmp/diff_new_pack.fq60oX/_new  2026-09-24 22:55:08.999418413 +0200
@@ -16,7 +16,7 @@
 ===================================================================
 --- tests/local.mk.orig
 +++ tests/local.mk
-@@ -828,13 +828,8 @@ all_tests =                                       \
+@@ -856,13 +856,8 @@ all_tests =                                       \
  # See tests/factor/create-test.sh.
  tf = tests/factor
  factor_tests = \

++++++ coreutils-tests-workaround-make-fdleak.patch ++++++
--- /var/tmp/diff_new_pack.fq60oX/_old  2026-09-24 22:55:09.010418873 +0200
+++ /var/tmp/diff_new_pack.fq60oX/_new  2026-09-24 22:55:09.012418956 +0200
@@ -6,7 +6,7 @@
 ===================================================================
 --- tests/init.sh.orig
 +++ tests/init.sh
-@@ -738,6 +738,16 @@ compare ()
+@@ -739,6 +739,16 @@ compare ()
  }
  
  # 
-----------------------------------------------------------------------------

Reply via email to