diff --git a/coreutils-9.1-i18n-1.patch b/coreutils-9.2-i18n-1.patch similarity index 91% rename from coreutils-9.1-i18n-1.patch rename to coreutils-9.2-i18n-1.patch index 2dbcb6e..0e1f999 100644 --- a/coreutils-9.1-i18n-1.patch +++ b/coreutils-9.2-i18n-1.patch @@ -1,61 +1,15 @@ -Submitted by: Xi Ruoyao -Date: 2022-04-19 -Initial Package Version: 9.1 +Submitted by: Xi Ruoyao +Date: 2023-03-21 +Initial Package Version: 9.2 Upstream Status: Rejected -Origin: https://src.fedoraproject.org/rpms/coreutils/raw/9325dbb/f/coreutils-i18n.patch +Origin: https://src.fedoraproject.org/rpms/coreutils/raw/f3c6ff7e2cdc/f/coreutils-i18n.patch + Rebased for 9.2 Description: Fixes i18n issues with various Coreutils programs -From 01010419a6499768563e7b2f3fd56cf16edda75e Mon Sep 17 00:00:00 2001 -From: rpm-build -Date: Mon, 4 Oct 2021 08:54:37 +0200 -Subject: [PATCH] coreutils-i18n.patch - ---- - bootstrap.conf | 1 + - configure.ac | 2 + - lib/linebuffer.h | 8 + - lib/mbfile.c | 3 + - lib/mbfile.h | 255 ++++++++++++ - m4/mbfile.m4 | 14 + - src/cut.c | 508 +++++++++++++++++++++-- - src/expand-common.c | 114 ++++++ - src/expand-common.h | 12 + - src/expand.c | 90 +++- - src/fold.c | 312 ++++++++++++-- - src/join.c | 359 ++++++++++++++-- - src/local.mk | 4 +- - src/pr.c | 443 ++++++++++++++++++-- - src/sort.c | 792 +++++++++++++++++++++++++++++++++--- - src/unexpand.c | 101 ++++- - src/uniq.c | 119 +++++- - tests/Coreutils.pm | 3 + - tests/expand/mb.sh | 183 +++++++++ - tests/i18n/sort.sh | 29 ++ - tests/local.mk | 4 + - tests/misc/expand.pl | 42 ++ - tests/misc/fold.pl | 50 ++- - tests/misc/join.pl | 50 +++ - tests/misc/sort-mb-tests.sh | 45 ++ - tests/misc/sort-merge.pl | 42 ++ - tests/misc/sort.pl | 40 +- - tests/misc/unexpand.pl | 39 ++ - tests/misc/uniq.pl | 55 +++ - tests/pr/pr-tests.pl | 49 +++ - tests/unexpand/mb.sh | 172 ++++++++ - 31 files changed, 3698 insertions(+), 242 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 - -diff --git a/bootstrap.conf b/bootstrap.conf -index c1399e3..60b39cf 100644 ---- a/bootstrap.conf -+++ b/bootstrap.conf -@@ -162,6 +162,7 @@ gnulib_modules=" +diff --color -Naur coreutils-9.2/bootstrap.conf coreutils-9.2-i18n/bootstrap.conf +--- coreutils-9.2/bootstrap.conf 2023-03-14 02:08:09.000000000 +0800 ++++ coreutils-9.2-i18n/bootstrap.conf 2023-03-21 20:04:28.983528221 +0800 +@@ -165,6 +165,7 @@ maintainer-makefile malloc-gnu manywarnings @@ -63,11 +17,10 @@ index c1399e3..60b39cf 100644 mbrlen mbrtowc mbsalign -diff --git a/configure.ac b/configure.ac -index 7e4afc9..4656a35 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -476,6 +476,8 @@ fi +diff --color -Naur coreutils-9.2/configure.ac coreutils-9.2-i18n/configure.ac +--- coreutils-9.2/configure.ac 2023-03-20 20:58:05.000000000 +0800 ++++ coreutils-9.2-i18n/configure.ac 2023-03-21 20:04:28.983528221 +0800 +@@ -477,6 +477,8 @@ # I'm leaving it here for now. This whole thing needs to be modernized... gl_WINSIZE_IN_PTEM @@ -76,10 +29,9 @@ index 7e4afc9..4656a35 100644 gl_HEADER_TIOCGWINSZ_IN_TERMIOS_H if test $gl_cv_sys_tiocgwinsz_needs_termios_h = no && \ -diff --git a/lib/linebuffer.h b/lib/linebuffer.h -index 07d45ca..af62e6c 100644 ---- a/lib/linebuffer.h -+++ b/lib/linebuffer.h +diff --color -Naur coreutils-9.2/lib/linebuffer.h coreutils-9.2-i18n/lib/linebuffer.h +--- coreutils-9.2/lib/linebuffer.h 2023-03-14 02:12:12.000000000 +0800 ++++ coreutils-9.2-i18n/lib/linebuffer.h 2023-03-21 20:04:28.983528221 +0800 @@ -22,6 +22,11 @@ # include "idx.h" # include @@ -92,7 +44,7 @@ index 07d45ca..af62e6c 100644 /* A 'struct linebuffer' holds a line of text. */ struct linebuffer -@@ -29,6 +34,9 @@ struct linebuffer +@@ -29,6 +34,9 @@ idx_t size; /* Allocated. */ idx_t length; /* Used. */ char *buffer; @@ -102,20 +54,16 @@ index 07d45ca..af62e6c 100644 }; /* Initialize linebuffer LINEBUFFER for use. */ -diff --git a/lib/mbfile.c b/lib/mbfile.c -new file mode 100644 -index 0000000..b0a468e ---- /dev/null -+++ b/lib/mbfile.c +diff --color -Naur coreutils-9.2/lib/mbfile.c coreutils-9.2-i18n/lib/mbfile.c +--- coreutils-9.2/lib/mbfile.c 1970-01-01 08:00:00.000000000 +0800 ++++ coreutils-9.2-i18n/lib/mbfile.c 2023-03-21 20:04:28.983528221 +0800 @@ -0,0 +1,3 @@ +#include +#define MBFILE_INLINE _GL_EXTERN_INLINE +#include "mbfile.h" -diff --git a/lib/mbfile.h b/lib/mbfile.h -new file mode 100644 -index 0000000..11f1b12 ---- /dev/null -+++ b/lib/mbfile.h +diff --color -Naur coreutils-9.2/lib/mbfile.h coreutils-9.2-i18n/lib/mbfile.h +--- coreutils-9.2/lib/mbfile.h 1970-01-01 08:00:00.000000000 +0800 ++++ coreutils-9.2-i18n/lib/mbfile.h 2023-03-21 20:04:28.983528221 +0800 @@ -0,0 +1,255 @@ +/* Multibyte character I/O: macros for multi-byte encodings. + Copyright (C) 2001, 2005, 2009-2015 Free Software Foundation, Inc. @@ -372,11 +320,9 @@ index 0000000..11f1b12 +_GL_INLINE_HEADER_BEGIN + +#endif /* _MBFILE_H */ -diff --git a/m4/mbfile.m4 b/m4/mbfile.m4 -new file mode 100644 -index 0000000..8589902 ---- /dev/null -+++ b/m4/mbfile.m4 +diff --color -Naur coreutils-9.2/m4/mbfile.m4 coreutils-9.2-i18n/m4/mbfile.m4 +--- coreutils-9.2/m4/mbfile.m4 1970-01-01 08:00:00.000000000 +0800 ++++ coreutils-9.2-i18n/m4/mbfile.m4 2023-03-21 20:04:28.983528221 +0800 @@ -0,0 +1,14 @@ +# mbfile.m4 serial 7 +dnl Copyright (C) 2005, 2008-2015 Free Software Foundation, Inc. @@ -392,10 +338,9 @@ index 0000000..8589902 + AC_REQUIRE([AC_TYPE_MBSTATE_T]) + : +]) -diff --git a/src/cut.c b/src/cut.c -index 6fd8978..faef877 100644 ---- a/src/cut.c -+++ b/src/cut.c +diff --color -Naur coreutils-9.2/src/cut.c coreutils-9.2-i18n/src/cut.c +--- coreutils-9.2/src/cut.c 2023-03-14 02:08:10.000000000 +0800 ++++ coreutils-9.2-i18n/src/cut.c 2023-03-21 20:04:28.984528206 +0800 @@ -28,6 +28,11 @@ #include #include @@ -408,7 +353,7 @@ index 6fd8978..faef877 100644 #include "system.h" #include "error.h" -@@ -37,6 +42,18 @@ +@@ -36,6 +41,18 @@ #include "set-fields.h" @@ -427,7 +372,7 @@ index 6fd8978..faef877 100644 /* The official name of this program (e.g., no 'g' prefix). */ #define PROGRAM_NAME "cut" -@@ -53,6 +70,52 @@ +@@ -52,6 +69,52 @@ } \ while (0) @@ -480,7 +425,7 @@ index 6fd8978..faef877 100644 /* Pointer inside RP. When checking if a byte or field is selected by a finite range, we check if it is between CURRENT_RP.LO -@@ -60,6 +123,9 @@ +@@ -59,6 +122,9 @@ CURRENT_RP.HI then we make CURRENT_RP to point to the next range pair. */ static struct field_range_pair *current_rp; @@ -490,7 +435,7 @@ index 6fd8978..faef877 100644 /* This buffer is used to support the semantics of the -s option (or lack of same) when the specified field list includes (does not include) the first field. In both of those cases, the entire -@@ -72,6 +138,29 @@ static char *field_1_buffer; +@@ -71,6 +137,29 @@ /* The number of bytes allocated for FIELD_1_BUFFER. */ static size_t field_1_bufsize; @@ -520,7 +465,7 @@ index 6fd8978..faef877 100644 /* If true do not output lines containing no delimiter characters. Otherwise, all such lines are printed. This option is valid only with field mode. */ -@@ -83,10 +172,16 @@ static bool complement; +@@ -82,10 +171,16 @@ /* The delimiter character for field mode. */ static unsigned char delim; @@ -537,7 +482,7 @@ index 6fd8978..faef877 100644 /* The length of output_delimiter_string. */ static size_t output_delimiter_length; -@@ -94,9 +189,6 @@ static size_t output_delimiter_length; +@@ -93,9 +188,6 @@ string consisting of the input delimiter. */ static char *output_delimiter_string; @@ -547,7 +492,7 @@ index 6fd8978..faef877 100644 /* True if we have ever read standard input. */ static bool have_read_stdin; -@@ -150,7 +242,7 @@ Print selected parts of lines from each FILE to standard output.\n\ +@@ -149,7 +241,7 @@ -f, --fields=LIST select only these fields; also print any line\n\ that contains no delimiter character, unless\n\ the -s option is specified\n\ @@ -556,7 +501,7 @@ index 6fd8978..faef877 100644 "), stdout); fputs (_("\ --complement complement the set of selected bytes, characters\n\ -@@ -250,7 +342,7 @@ cut_bytes (FILE *stream) +@@ -249,7 +341,7 @@ next_item (&byte_idx); if (print_kth (byte_idx)) { @@ -565,7 +510,7 @@ index 6fd8978..faef877 100644 { if (print_delimiter && is_range_start_index (byte_idx)) { -@@ -266,6 +358,82 @@ cut_bytes (FILE *stream) +@@ -265,6 +357,82 @@ } } @@ -648,7 +593,7 @@ index 6fd8978..faef877 100644 /* Read from stream STREAM, printing to standard output any selected fields. */ static void -@@ -411,11 +579,218 @@ cut_fields (FILE *stream) +@@ -410,11 +578,218 @@ } } @@ -869,7 +814,7 @@ index 6fd8978..faef877 100644 { FILE *stream; -@@ -459,8 +834,8 @@ main (int argc, char **argv) +@@ -458,8 +833,8 @@ int optc; bool ok; bool delim_specified = false; @@ -880,7 +825,7 @@ index 6fd8978..faef877 100644 initialize_main (&argc, &argv); set_program_name (argv[0]); -@@ -470,6 +845,8 @@ main (int argc, char **argv) +@@ -469,6 +844,8 @@ atexit (close_stdout); @@ -889,7 +834,7 @@ index 6fd8978..faef877 100644 /* By default, all non-delimited lines are printed. */ suppress_non_delimited = false; -@@ -481,35 +858,77 @@ main (int argc, char **argv) +@@ -480,35 +857,77 @@ switch (optc) { case 'b': @@ -977,7 +922,7 @@ index 6fd8978..faef877 100644 break; case 's': -@@ -533,40 +952,57 @@ main (int argc, char **argv) +@@ -532,40 +951,57 @@ } } @@ -1052,10 +997,164 @@ index 6fd8978..faef877 100644 if (have_read_stdin && fclose (stdin) == EOF) -diff --git a/src/expand-common.c b/src/expand-common.c -index deec1bd..b39f740 100644 ---- a/src/expand-common.c -+++ b/src/expand-common.c +diff --color -Naur coreutils-9.2/src/expand.c coreutils-9.2-i18n/src/expand.c +--- coreutils-9.2/src/expand.c 2023-03-14 02:08:10.000000000 +0800 ++++ coreutils-9.2-i18n/src/expand.c 2023-03-21 20:04:28.984528206 +0800 +@@ -37,6 +37,9 @@ + #include + #include + #include ++ ++#include ++ + #include "system.h" + #include "die.h" + +@@ -97,19 +100,41 @@ + { + /* Input stream. */ + FILE *fp = next_file (NULL); ++ mb_file_t mbf; ++ mbf_char_t c; ++ /* True if the starting locale is utf8. */ ++ bool using_utf_locale; ++ ++ /* True if the first file contains BOM header. */ ++ bool found_bom; ++ using_utf_locale=check_utf_locale(); + + if (!fp) + return; ++ mbf_init (mbf, fp); ++ found_bom=check_bom(fp,&mbf); + +- while (true) ++ if (using_utf_locale == false && found_bom == true) ++ { ++ /*try using some predefined locale */ ++ ++ if (set_utf_locale () != 0) + { +- /* Input character, or EOF. */ +- int c; ++ error (EXIT_FAILURE, errno, _("cannot set UTF-8 locale")); ++ } ++ } ++ + ++ if (found_bom == true) ++ { ++ print_bom(); ++ } ++ ++ while (true) ++ { + /* If true, perform translations. */ + bool convert = true; + +- + /* The following variables have valid values only when CONVERT + is true: */ + +@@ -119,17 +144,48 @@ + /* Index in TAB_LIST of next tab stop to examine. */ + size_t tab_index = 0; + +- + /* Convert a line of text. */ + + do + { +- while ((c = getc (fp)) < 0 && (fp = next_file (fp))) +- continue; ++ while (true) { ++ mbf_getc (c, mbf); ++ if ((mb_iseof (c)) && (fp = next_file (fp))) ++ { ++ mbf_init (mbf, fp); ++ if (fp!=NULL) ++ { ++ if (check_bom(fp,&mbf)==true) ++ { ++ /*Not the first file - check BOM header*/ ++ if (using_utf_locale==false && found_bom==false) ++ { ++ /*BOM header in subsequent file but not in the first one. */ ++ error (EXIT_FAILURE, errno, _("combination of files with and without BOM header")); ++ } ++ } ++ else ++ { ++ if(using_utf_locale==false && found_bom==true) ++ { ++ /*First file conatined BOM header - locale was switched to UTF ++ *all subsequent files should contain BOM. */ ++ error (EXIT_FAILURE, errno, _("combination of files with and without BOM header")); ++ } ++ } ++ } ++ continue; ++ } ++ else ++ { ++ break; ++ } ++ } ++ + + if (convert) + { +- if (c == '\t') ++ if (mb_iseq (c, '\t')) + { + /* Column the next input tab stop is on. */ + uintmax_t next_tab_column; +@@ -148,32 +204,34 @@ + if (putchar (' ') < 0) + die (EXIT_FAILURE, errno, _("write error")); + +- c = ' '; ++ mb_setascii (&c, ' '); + } +- else if (c == '\b') ++ else if (mb_iseq (c, '\b')) + { + /* Go back one column, and force recalculation of the + next tab stop. */ + column -= !!column; + tab_index -= !!tab_index; + } +- else ++ /* A leading control character could make us trip over. */ ++ else if (!mb_iscntrl (c)) + { +- column++; ++ column += mb_width (c); + if (!column) + die (EXIT_FAILURE, 0, _("input line is too long")); + } + +- convert &= convert_entire_line || !! isblank (c); ++ convert &= convert_entire_line || mb_isblank (c); + } + +- if (c < 0) ++ if (mb_iseof (c)) + return; + +- if (putchar (c) < 0) ++ mb_putc (c, stdout); ++ if (ferror (stdout)) + die (EXIT_FAILURE, errno, _("write error")); + } +- while (c != '\n'); ++ while (!mb_iseq (c, '\n')); + } + } + +diff --color -Naur coreutils-9.2/src/expand-common.c coreutils-9.2-i18n/src/expand-common.c +--- coreutils-9.2/src/expand-common.c 2023-03-14 02:08:10.000000000 +0800 ++++ coreutils-9.2-i18n/src/expand-common.c 2023-03-21 20:04:28.984528206 +0800 @@ -19,6 +19,7 @@ #include #include @@ -1064,7 +1163,7 @@ index deec1bd..b39f740 100644 #include "system.h" #include "die.h" #include "error.h" -@@ -125,6 +126,119 @@ set_increment_size (uintmax_t tabval) +@@ -125,6 +126,119 @@ return ok; } @@ -1184,11 +1283,10 @@ index deec1bd..b39f740 100644 /* Add the comma or blank separated list of tab stops STOPS to the list of tab stops. */ extern void -diff --git a/src/expand-common.h b/src/expand-common.h -index 5f59a0e..835b9d5 100644 ---- a/src/expand-common.h -+++ b/src/expand-common.h -@@ -25,6 +25,18 @@ extern size_t max_column_width; +diff --color -Naur coreutils-9.2/src/expand-common.h coreutils-9.2-i18n/src/expand-common.h +--- coreutils-9.2/src/expand-common.h 2023-03-14 02:08:10.000000000 +0800 ++++ coreutils-9.2-i18n/src/expand-common.h 2023-03-21 20:04:28.984528206 +0800 +@@ -25,6 +25,18 @@ /* The desired exit status. */ extern int exit_status; @@ -1207,166 +1305,9 @@ index 5f59a0e..835b9d5 100644 /* Add tab stop TABVAL to the end of 'tab_list'. */ extern void add_tab_stop (uintmax_t tabval); -diff --git a/src/expand.c b/src/expand.c -index ed78ca8..a4cefa1 100644 ---- a/src/expand.c -+++ b/src/expand.c -@@ -37,6 +37,9 @@ - #include - #include - #include -+ -+#include -+ - #include "system.h" - #include "die.h" - -@@ -97,19 +100,41 @@ expand (void) - { - /* Input stream. */ - FILE *fp = next_file (NULL); -+ mb_file_t mbf; -+ mbf_char_t c; -+ /* True if the starting locale is utf8. */ -+ bool using_utf_locale; -+ -+ /* True if the first file contains BOM header. */ -+ bool found_bom; -+ using_utf_locale=check_utf_locale(); - - if (!fp) - return; -+ mbf_init (mbf, fp); -+ found_bom=check_bom(fp,&mbf); - -- while (true) -+ if (using_utf_locale == false && found_bom == true) -+ { -+ /*try using some predefined locale */ -+ -+ if (set_utf_locale () != 0) - { -- /* Input character, or EOF. */ -- int c; -+ error (EXIT_FAILURE, errno, _("cannot set UTF-8 locale")); -+ } -+ } -+ -+ -+ if (found_bom == true) -+ { -+ print_bom(); -+ } - -+ while (true) -+ { - /* If true, perform translations. */ - bool convert = true; - -- - /* The following variables have valid values only when CONVERT - is true: */ - -@@ -119,17 +144,48 @@ expand (void) - /* Index in TAB_LIST of next tab stop to examine. */ - size_t tab_index = 0; - -- - /* Convert a line of text. */ - - do - { -- while ((c = getc (fp)) < 0 && (fp = next_file (fp))) -- continue; -+ while (true) { -+ mbf_getc (c, mbf); -+ if ((mb_iseof (c)) && (fp = next_file (fp))) -+ { -+ mbf_init (mbf, fp); -+ if (fp!=NULL) -+ { -+ if (check_bom(fp,&mbf)==true) -+ { -+ /*Not the first file - check BOM header*/ -+ if (using_utf_locale==false && found_bom==false) -+ { -+ /*BOM header in subsequent file but not in the first one. */ -+ error (EXIT_FAILURE, errno, _("combination of files with and without BOM header")); -+ } -+ } -+ else -+ { -+ if(using_utf_locale==false && found_bom==true) -+ { -+ /*First file conatined BOM header - locale was switched to UTF -+ *all subsequent files should contain BOM. */ -+ error (EXIT_FAILURE, errno, _("combination of files with and without BOM header")); -+ } -+ } -+ } -+ continue; -+ } -+ else -+ { -+ break; -+ } -+ } -+ - - if (convert) - { -- if (c == '\t') -+ if (mb_iseq (c, '\t')) - { - /* Column the next input tab stop is on. */ - uintmax_t next_tab_column; -@@ -148,32 +204,34 @@ expand (void) - if (putchar (' ') < 0) - die (EXIT_FAILURE, errno, _("write error")); - -- c = ' '; -+ mb_setascii (&c, ' '); - } -- else if (c == '\b') -+ else if (mb_iseq (c, '\b')) - { - /* Go back one column, and force recalculation of the - next tab stop. */ - column -= !!column; - tab_index -= !!tab_index; - } -- else -+ /* A leading control character could make us trip over. */ -+ else if (!mb_iscntrl (c)) - { -- column++; -+ column += mb_width (c); - if (!column) - die (EXIT_FAILURE, 0, _("input line is too long")); - } - -- convert &= convert_entire_line || !! isblank (c); -+ convert &= convert_entire_line || mb_isblank (c); - } - -- if (c < 0) -+ if (mb_iseof (c)) - return; - -- if (putchar (c) < 0) -+ mb_putc (c, stdout); -+ if (ferror (stdout)) - die (EXIT_FAILURE, errno, _("write error")); - } -- while (c != '\n'); -+ while (!mb_iseq (c, '\n')); - } - } - -diff --git a/src/fold.c b/src/fold.c -index f07a90b..d32dbfd 100644 ---- a/src/fold.c -+++ b/src/fold.c +diff --color -Naur coreutils-9.2/src/fold.c coreutils-9.2-i18n/src/fold.c +--- coreutils-9.2/src/fold.c 2023-03-14 02:08:10.000000000 +0800 ++++ coreutils-9.2-i18n/src/fold.c 2023-03-21 20:04:28.984528206 +0800 @@ -22,12 +22,34 @@ #include #include @@ -1448,7 +1389,7 @@ index f07a90b..d32dbfd 100644 {"spaces", no_argument, NULL, 's'}, {"width", required_argument, NULL, 'w'}, {GETOPT_HELP_OPTION_DECL}, -@@ -76,6 +119,7 @@ Wrap input lines in each FILE, writing to standard output.\n\ +@@ -76,6 +119,7 @@ fputs (_("\ -b, --bytes count bytes rather than columns\n\ @@ -1456,7 +1397,7 @@ index f07a90b..d32dbfd 100644 -s, --spaces break at spaces\n\ -w, --width=WIDTH use WIDTH columns instead of 80\n\ "), stdout); -@@ -93,7 +137,7 @@ Wrap input lines in each FILE, writing to standard output.\n\ +@@ -93,7 +137,7 @@ static size_t adjust_column (size_t column, char c) { @@ -1465,7 +1406,7 @@ index f07a90b..d32dbfd 100644 { if (c == '\b') { -@@ -116,30 +160,14 @@ adjust_column (size_t column, char c) +@@ -116,30 +160,14 @@ to stdout, with maximum line length WIDTH. Return true if successful. */ @@ -1498,7 +1439,7 @@ index f07a90b..d32dbfd 100644 fadvise (istream, FADVISE_SEQUENTIAL); -@@ -169,6 +197,15 @@ fold_file (char const *filename, size_t width) +@@ -169,6 +197,15 @@ bool found_blank = false; size_t logical_end = offset_out; @@ -1514,7 +1455,7 @@ index f07a90b..d32dbfd 100644 /* Look for the last blank. */ while (logical_end) { -@@ -215,13 +252,225 @@ fold_file (char const *filename, size_t width) +@@ -215,13 +252,225 @@ line_out[offset_out++] = c; } @@ -1742,7 +1683,7 @@ index f07a90b..d32dbfd 100644 if (STREQ (filename, "-")) clearerr (istream); else if (fclose (istream) != 0 && !saved_errno) -@@ -252,7 +501,8 @@ main (int argc, char **argv) +@@ -252,7 +501,8 @@ atexit (close_stdout); @@ -1752,7 +1693,7 @@ index f07a90b..d32dbfd 100644 while ((optc = getopt_long (argc, argv, shortopts, longopts, NULL)) != -1) { -@@ -261,7 +511,15 @@ main (int argc, char **argv) +@@ -261,7 +511,15 @@ switch (optc) { case 'b': /* Count bytes rather than columns. */ @@ -1769,10 +1710,9 @@ index f07a90b..d32dbfd 100644 break; case 's': /* Break at word boundaries. */ -diff --git a/src/join.c b/src/join.c -index f2fd172..6c7d1ed 100644 ---- a/src/join.c -+++ b/src/join.c +diff --color -Naur coreutils-9.2/src/join.c coreutils-9.2-i18n/src/join.c +--- coreutils-9.2/src/join.c 2023-03-14 02:08:10.000000000 +0800 ++++ coreutils-9.2-i18n/src/join.c 2023-03-21 20:05:01.009066944 +0800 @@ -22,19 +22,33 @@ #include #include @@ -1808,7 +1748,7 @@ index f2fd172..6c7d1ed 100644 /* The official name of this program (e.g., no 'g' prefix). */ #define PROGRAM_NAME "join" -@@ -136,10 +150,12 @@ static struct outlist outlist_head; +@@ -136,10 +150,12 @@ /* Last element in 'outlist', where a new element can be added. */ static struct outlist *outlist_end = &outlist_head; @@ -1825,7 +1765,7 @@ index f2fd172..6c7d1ed 100644 /* If nonzero, check that the input is correctly ordered. */ static enum -@@ -280,13 +296,14 @@ xfields (struct line *line) +@@ -280,13 +296,14 @@ if (ptr == lim) return; @@ -1843,7 +1783,7 @@ index f2fd172..6c7d1ed 100644 { /* Skip leading blanks before the first field. */ while (field_sep (*ptr)) -@@ -310,6 +327,147 @@ xfields (struct line *line) +@@ -310,6 +327,147 @@ extract_field (line, ptr, lim - ptr); } @@ -1991,7 +1931,7 @@ index f2fd172..6c7d1ed 100644 static void freeline (struct line *line) { -@@ -331,56 +489,133 @@ keycmp (struct line const *line1, struct line const *line2, +@@ -331,56 +489,133 @@ size_t jf_1, size_t jf_2) { /* Start of field to compare in each file. */ @@ -2143,12 +2083,12 @@ index f2fd172..6c7d1ed 100644 + if (diff) return diff; -- return len1 < len2 ? -1 : len1 != len2; +- return (len1 > len2) - (len1 < len2); + return len[0] - len[1]; } /* Check that successive input lines PREV and CURRENT from input file -@@ -472,6 +707,11 @@ get_line (FILE *fp, struct line **linep, int which) +@@ -472,6 +707,11 @@ } ++line_no[which - 1]; @@ -2160,7 +2100,7 @@ index f2fd172..6c7d1ed 100644 xfields (line); if (prevline[which - 1]) -@@ -567,21 +807,28 @@ prfield (size_t n, struct line const *line) +@@ -567,21 +807,28 @@ /* Output all the fields in line, other than the join field. */ @@ -2192,7 +2132,7 @@ index f2fd172..6c7d1ed 100644 prfield (i, line); } } -@@ -592,7 +839,6 @@ static void +@@ -592,7 +839,6 @@ prjoin (struct line const *line1, struct line const *line2) { const struct outlist *outlist; @@ -2200,7 +2140,7 @@ index f2fd172..6c7d1ed 100644 size_t field; struct line const *line; -@@ -626,7 +872,7 @@ prjoin (struct line const *line1, struct line const *line2) +@@ -626,7 +872,7 @@ o = o->next; if (o == NULL) break; @@ -2209,7 +2149,7 @@ index f2fd172..6c7d1ed 100644 } putchar (eolchar); } -@@ -1102,20 +1348,43 @@ main (int argc, char **argv) +@@ -1102,20 +1348,43 @@ case 't': { @@ -2262,11 +2202,10 @@ index f2fd172..6c7d1ed 100644 } break; -diff --git a/src/local.mk b/src/local.mk -index e1d15ce..1a5ffaa 100644 ---- a/src/local.mk -+++ b/src/local.mk -@@ -434,8 +434,8 @@ src_base32_CPPFLAGS = -DBASE_TYPE=32 $(AM_CPPFLAGS) +diff --color -Naur coreutils-9.2/src/local.mk coreutils-9.2-i18n/src/local.mk +--- coreutils-9.2/src/local.mk 2023-03-14 02:08:10.000000000 +0800 ++++ coreutils-9.2-i18n/src/local.mk 2023-03-21 20:04:28.984528206 +0800 +@@ -438,8 +438,8 @@ src_basenc_SOURCES = src/basenc.c src_basenc_CPPFLAGS = -DBASE_TYPE=42 $(AM_CPPFLAGS) @@ -2277,10 +2216,9 @@ index e1d15ce..1a5ffaa 100644 src_wc_SOURCES = src/wc.c if USE_AVX2_WC_LINECOUNT -diff --git a/src/pr.c b/src/pr.c -index 4c17c00..b4fab1c 100644 ---- a/src/pr.c -+++ b/src/pr.c +diff --color -Naur coreutils-9.2/src/pr.c coreutils-9.2-i18n/src/pr.c +--- coreutils-9.2/src/pr.c 2023-03-20 20:58:17.000000000 +0800 ++++ coreutils-9.2-i18n/src/pr.c 2023-03-21 20:04:28.985528190 +0800 @@ -311,6 +311,24 @@ #include @@ -2325,7 +2263,7 @@ index 4c17c00..b4fab1c 100644 /* The official name of this program (e.g., no 'g' prefix). */ #define PROGRAM_NAME "pr" -@@ -417,7 +447,20 @@ struct COLUMN +@@ -417,7 +447,20 @@ typedef struct COLUMN COLUMN; @@ -2347,7 +2285,7 @@ index 4c17c00..b4fab1c 100644 static bool read_line (COLUMN *p); static bool print_page (void); static bool print_stored (COLUMN *p); -@@ -429,6 +472,7 @@ static void add_line_number (COLUMN *p); +@@ -429,6 +472,7 @@ static void getoptnum (char const *n_str, int min, int *num, char const *errfmt); static void getoptarg (char *arg, char switch_char, char *character, @@ -2355,7 +2293,7 @@ index 4c17c00..b4fab1c 100644 int *number); static void print_files (int number_of_files, char **av); static void init_parameters (int number_of_files); -@@ -442,7 +486,6 @@ static void store_char (char c); +@@ -442,7 +486,6 @@ static void pad_down (unsigned int lines); static void read_rest_of_line (COLUMN *p); static void skip_read (COLUMN *p, int column_number); @@ -2363,7 +2301,7 @@ index 4c17c00..b4fab1c 100644 static void cleanup (void); static void print_sep_string (void); static void separator_string (char const *optarg_S); -@@ -454,7 +497,7 @@ static COLUMN *column_vector; +@@ -454,7 +497,7 @@ we store the leftmost columns contiguously in buff. To print a line from buff, get the index of the first character from line_vector[i], and print up to line_vector[i + 1]. */ @@ -2372,7 +2310,7 @@ index 4c17c00..b4fab1c 100644 /* Index of the position in buff where the next character will be stored. */ -@@ -558,7 +601,7 @@ static int chars_per_column; +@@ -558,7 +601,7 @@ static bool untabify_input = false; /* (-e) The input tab character. */ @@ -2381,7 +2319,7 @@ index 4c17c00..b4fab1c 100644 /* (-e) Tabstops are at chars_per_tab, 2*chars_per_tab, 3*chars_per_tab, ... where the leftmost column is 1. */ -@@ -568,7 +611,10 @@ static int chars_per_input_tab = 8; +@@ -568,7 +611,10 @@ static bool tabify_output = false; /* (-i) The output tab character. */ @@ -2393,7 +2331,7 @@ index 4c17c00..b4fab1c 100644 /* (-i) The width of the output tab. */ static int chars_per_output_tab = 8; -@@ -638,7 +684,13 @@ static int line_number; +@@ -638,7 +684,13 @@ static bool numbered_lines = false; /* (-n) Character which follows each line number. */ @@ -2408,7 +2346,7 @@ index 4c17c00..b4fab1c 100644 /* (-n) line counting starts with 1st line of input file (not with 1st line of 1st page printed). */ -@@ -691,6 +743,7 @@ static bool use_col_separator = false; +@@ -691,6 +743,7 @@ -a|COLUMN|-m is a 'space' and with the -J option a 'tab'. */ static char const *col_sep_string = ""; static int col_sep_length = 0; @@ -2416,7 +2354,7 @@ index 4c17c00..b4fab1c 100644 static char *column_separator = (char *) " "; static char *line_separator = (char *) "\t"; -@@ -853,6 +906,13 @@ separator_string (char const *optarg_S) +@@ -853,6 +906,13 @@ integer_overflow (); col_sep_length = len; col_sep_string = optarg_S; @@ -2430,7 +2368,7 @@ index 4c17c00..b4fab1c 100644 } int -@@ -877,6 +937,21 @@ main (int argc, char **argv) +@@ -877,6 +937,21 @@ atexit (close_stdout); @@ -2452,7 +2390,7 @@ index 4c17c00..b4fab1c 100644 n_files = 0; file_names = (argc > 1 ? xnmalloc (argc - 1, sizeof (char *)) -@@ -953,8 +1028,12 @@ main (int argc, char **argv) +@@ -953,8 +1028,12 @@ break; case 'e': if (optarg) @@ -2467,7 +2405,7 @@ index 4c17c00..b4fab1c 100644 /* Could check tab width > 0. */ untabify_input = true; break; -@@ -967,8 +1046,12 @@ main (int argc, char **argv) +@@ -967,8 +1046,12 @@ break; case 'i': if (optarg) @@ -2482,7 +2420,7 @@ index 4c17c00..b4fab1c 100644 /* Could check tab width > 0. */ tabify_output = true; break; -@@ -986,8 +1069,8 @@ main (int argc, char **argv) +@@ -986,8 +1069,8 @@ case 'n': numbered_lines = true; if (optarg) @@ -2493,7 +2431,7 @@ index 4c17c00..b4fab1c 100644 break; case 'N': skip_count = false; -@@ -1012,6 +1095,7 @@ main (int argc, char **argv) +@@ -1012,6 +1095,7 @@ /* Reset an additional input of -s, -S dominates -s */ col_sep_string = ""; col_sep_length = 0; @@ -2501,7 +2439,7 @@ index 4c17c00..b4fab1c 100644 use_col_separator = true; if (optarg) separator_string (optarg); -@@ -1166,10 +1250,45 @@ getoptnum (char const *n_str, int min, int *num, char const *err) +@@ -1166,10 +1250,45 @@ a number. */ static void @@ -2549,7 +2487,7 @@ index 4c17c00..b4fab1c 100644 if (*arg) { long int tmp_long; -@@ -1191,6 +1310,11 @@ static void +@@ -1198,6 +1317,11 @@ init_parameters (int number_of_files) { int chars_used_by_number = 0; @@ -2561,7 +2499,7 @@ index 4c17c00..b4fab1c 100644 lines_per_body = lines_per_page - lines_per_header - lines_per_footer; if (lines_per_body <= 0) -@@ -1228,7 +1352,7 @@ init_parameters (int number_of_files) +@@ -1235,7 +1359,7 @@ else col_sep_string = column_separator; @@ -2570,7 +2508,7 @@ index 4c17c00..b4fab1c 100644 use_col_separator = true; } /* It's rather pointless to define a TAB separator with column -@@ -1260,11 +1384,11 @@ init_parameters (int number_of_files) +@@ -1267,11 +1391,11 @@ + TAB_WIDTH (chars_per_input_tab, chars_per_number); */ /* Estimate chars_per_text without any margin and keep it constant. */ @@ -2584,7 +2522,7 @@ index 4c17c00..b4fab1c 100644 /* The number is part of the column width unless we are printing files in parallel. */ -@@ -1273,7 +1397,7 @@ init_parameters (int number_of_files) +@@ -1280,7 +1404,7 @@ } int sep_chars, useful_chars; @@ -2593,7 +2531,7 @@ index 4c17c00..b4fab1c 100644 sep_chars = INT_MAX; if (INT_SUBTRACT_WRAPV (chars_per_line - chars_used_by_number, sep_chars, &useful_chars)) -@@ -1296,7 +1420,7 @@ init_parameters (int number_of_files) +@@ -1303,7 +1427,7 @@ We've to use 8 as the lower limit, if we use chars_per_default_tab = 8 to expand a tab which is not an input_tab-char. */ free (clump_buff); @@ -2602,7 +2540,7 @@ index 4c17c00..b4fab1c 100644 } /* Open the necessary files, -@@ -1402,7 +1526,7 @@ init_funcs (void) +@@ -1409,7 +1533,7 @@ /* Enlarge p->start_position of first column to use the same form of padding_not_printed with all columns. */ @@ -2611,7 +2549,7 @@ index 4c17c00..b4fab1c 100644 /* This loop takes care of all but the rightmost column. */ -@@ -1436,7 +1560,7 @@ init_funcs (void) +@@ -1443,7 +1567,7 @@ } else { @@ -2620,7 +2558,7 @@ index 4c17c00..b4fab1c 100644 h_next = h + chars_per_column; } } -@@ -1733,9 +1857,9 @@ static void +@@ -1740,9 +1864,9 @@ align_column (COLUMN *p) { padding_not_printed = p->start_position; @@ -2632,7 +2570,7 @@ index 4c17c00..b4fab1c 100644 padding_not_printed = ANYWHERE; } -@@ -2010,13 +2134,13 @@ store_char (char c) +@@ -2017,13 +2141,13 @@ /* May be too generous. */ buff = X2REALLOC (buff, &buff_allocated); } @@ -2648,7 +2586,7 @@ index 4c17c00..b4fab1c 100644 char *s; int num_width; -@@ -2033,22 +2157,24 @@ add_line_number (COLUMN *p) +@@ -2040,22 +2164,24 @@ /* Tabification is assumed for multiple columns, also for n-separators, but 'default n-separator = TAB' hasn't been given priority over equal column_width also specified by POSIX. */ @@ -2677,7 +2615,7 @@ index 4c17c00..b4fab1c 100644 output_position = POS_AFTER_TAB (chars_per_output_tab, output_position); } -@@ -2207,7 +2333,7 @@ print_white_space (void) +@@ -2214,7 +2340,7 @@ while (goal - h_old > 1 && (h_new = POS_AFTER_TAB (chars_per_output_tab, h_old)) <= goal) { @@ -2686,7 +2624,7 @@ index 4c17c00..b4fab1c 100644 h_old = h_new; } while (++h_old <= goal) -@@ -2227,6 +2353,7 @@ print_sep_string (void) +@@ -2234,6 +2360,7 @@ { char const *s = col_sep_string; int l = col_sep_length; @@ -2694,7 +2632,7 @@ index 4c17c00..b4fab1c 100644 if (separators_not_printed <= 0) { -@@ -2238,6 +2365,7 @@ print_sep_string (void) +@@ -2245,6 +2372,7 @@ { for (; separators_not_printed > 0; --separators_not_printed) { @@ -2702,7 +2640,7 @@ index 4c17c00..b4fab1c 100644 while (l-- > 0) { /* 3 types of sep_strings: spaces only, spaces and chars, -@@ -2251,12 +2379,15 @@ print_sep_string (void) +@@ -2258,12 +2386,15 @@ } else { @@ -2719,7 +2657,7 @@ index 4c17c00..b4fab1c 100644 /* sep_string ends with some spaces */ if (spaces_not_printed > 0) print_white_space (); -@@ -2284,7 +2415,7 @@ print_clump (COLUMN *p, int n, char *clump) +@@ -2291,7 +2422,7 @@ required number of tabs and spaces. */ static void @@ -2728,7 +2666,7 @@ index 4c17c00..b4fab1c 100644 { if (tabify_output) { -@@ -2308,6 +2439,74 @@ print_char (char c) +@@ -2315,6 +2446,74 @@ putchar (c); } @@ -2803,7 +2741,7 @@ index 4c17c00..b4fab1c 100644 /* Skip to page PAGE before printing. PAGE may be larger than total number of pages. */ -@@ -2485,9 +2684,9 @@ read_line (COLUMN *p) +@@ -2492,9 +2691,9 @@ align_empty_cols = false; } @@ -2815,7 +2753,7 @@ index 4c17c00..b4fab1c 100644 padding_not_printed = ANYWHERE; } -@@ -2556,7 +2755,7 @@ print_stored (COLUMN *p) +@@ -2563,7 +2762,7 @@ COLUMN *q; int line = p->current_line++; @@ -2824,7 +2762,7 @@ index 4c17c00..b4fab1c 100644 /* FIXME UMR: Uninitialized memory read: * This is occurring while in: -@@ -2568,7 +2767,7 @@ print_stored (COLUMN *p) +@@ -2575,7 +2774,7 @@ xmalloc [xmalloc.c:94] init_store_cols [pr.c:1648] */ @@ -2833,7 +2771,7 @@ index 4c17c00..b4fab1c 100644 pad_vertically = true; -@@ -2588,9 +2787,9 @@ print_stored (COLUMN *p) +@@ -2595,9 +2794,9 @@ } } @@ -2845,7 +2783,7 @@ index 4c17c00..b4fab1c 100644 padding_not_printed = ANYWHERE; } -@@ -2603,8 +2802,8 @@ print_stored (COLUMN *p) +@@ -2610,8 +2809,8 @@ if (spaces_not_printed == 0) { output_position = p->start_position + end_vector[line]; @@ -2856,7 +2794,7 @@ index 4c17c00..b4fab1c 100644 } return true; -@@ -2623,7 +2822,7 @@ print_stored (COLUMN *p) +@@ -2630,7 +2829,7 @@ number of characters is 1.) */ static int @@ -2865,7 +2803,7 @@ index 4c17c00..b4fab1c 100644 { unsigned char uc = c; char *s = clump_buff; -@@ -2633,10 +2832,10 @@ char_to_clump (char c) +@@ -2640,10 +2839,10 @@ int chars; int chars_per_c = 8; @@ -2878,7 +2816,7 @@ index 4c17c00..b4fab1c 100644 { width = TAB_WIDTH (chars_per_c, input_position); -@@ -2717,6 +2916,164 @@ char_to_clump (char c) +@@ -2724,6 +2923,164 @@ return chars; } @@ -3043,10 +2981,9 @@ index 4c17c00..b4fab1c 100644 /* We've just printed some files and need to clean up things before looking for more options and printing the next batch of files. -diff --git a/src/sort.c b/src/sort.c -index 3b775d6..a0ba243 100644 ---- a/src/sort.c -+++ b/src/sort.c +diff --color -Naur coreutils-9.2/src/sort.c coreutils-9.2-i18n/src/sort.c +--- coreutils-9.2/src/sort.c 2023-03-20 20:58:05.000000000 +0800 ++++ coreutils-9.2-i18n/src/sort.c 2023-03-21 20:05:21.800806292 +0800 @@ -29,6 +29,14 @@ #include #include @@ -3062,7 +2999,7 @@ index 3b775d6..a0ba243 100644 #include "system.h" #include "argmatch.h" #include "die.h" -@@ -159,14 +167,39 @@ static int thousands_sep; +@@ -159,14 +167,39 @@ /* We currently ignore multi-byte grouping chars. */ static bool thousands_sep_ignored; @@ -3103,7 +3040,7 @@ index 3b775d6..a0ba243 100644 /* The kind of blanks for '-b' to skip in various options. */ enum blanktype { bl_start, bl_end, bl_both }; -@@ -343,13 +376,11 @@ static bool stable; +@@ -343,13 +376,11 @@ /* An int value outside char range. */ enum { NON_CHAR = CHAR_MAX + 1 }; @@ -3120,7 +3057,7 @@ index 3b775d6..a0ba243 100644 /* Flag to remove consecutive duplicate lines from the output. Only the last of a sequence of equal lines will be output. */ -@@ -805,6 +836,46 @@ reap_all (void) +@@ -805,6 +836,46 @@ reap (-1); } @@ -3167,7 +3104,7 @@ index 3b775d6..a0ba243 100644 /* Clean up any remaining temporary files. */ static void -@@ -1272,7 +1343,7 @@ zaptemp (char const *name) +@@ -1272,7 +1343,7 @@ free (node); } @@ -3176,7 +3113,7 @@ index 3b775d6..a0ba243 100644 static int struct_month_cmp (void const *m1, void const *m2) -@@ -1287,7 +1358,7 @@ struct_month_cmp (void const *m1, void const *m2) +@@ -1287,7 +1358,7 @@ /* Initialize the character class tables. */ static void @@ -3185,7 +3122,7 @@ index 3b775d6..a0ba243 100644 { size_t i; -@@ -1299,7 +1370,7 @@ inittables (void) +@@ -1299,7 +1370,7 @@ fold_toupper[i] = toupper (i); } @@ -3194,7 +3131,7 @@ index 3b775d6..a0ba243 100644 /* If we're not in the "C" locale, read different names for months. */ if (hard_LC_TIME) { -@@ -1381,6 +1452,84 @@ specify_nmerge (int oi, char c, char const *s) +@@ -1381,6 +1452,84 @@ xstrtol_fatal (e, oi, c, long_options, s); } @@ -3279,7 +3216,7 @@ index 3b775d6..a0ba243 100644 /* Specify the amount of main memory to use when sorting. */ static void specify_sort_size (int oi, char c, char const *s) -@@ -1612,7 +1761,7 @@ buffer_linelim (struct buffer const *buf) +@@ -1612,7 +1761,7 @@ by KEY in LINE. */ static char * @@ -3288,7 +3225,7 @@ index 3b775d6..a0ba243 100644 { char *ptr = line->text, *lim = ptr + line->length - 1; size_t sword = key->sword; -@@ -1621,10 +1770,10 @@ begfield (struct line const *line, struct keyfield const *key) +@@ -1621,10 +1770,10 @@ /* The leading field separator itself is included in a field when -t is absent. */ @@ -3301,7 +3238,7 @@ index 3b775d6..a0ba243 100644 ++ptr; if (ptr < lim) ++ptr; -@@ -1650,12 +1799,71 @@ begfield (struct line const *line, struct keyfield const *key) +@@ -1650,12 +1799,71 @@ return ptr; } @@ -3374,7 +3311,7 @@ index 3b775d6..a0ba243 100644 { char *ptr = line->text, *lim = ptr + line->length - 1; size_t eword = key->eword, echar = key->echar; -@@ -1670,10 +1878,10 @@ limfield (struct line const *line, struct keyfield const *key) +@@ -1670,10 +1878,10 @@ 'beginning' is the first character following the delimiting TAB. Otherwise, leave PTR pointing at the first 'blank' character after the preceding field. */ @@ -3387,7 +3324,7 @@ index 3b775d6..a0ba243 100644 ++ptr; if (ptr < lim && (eword || echar)) ++ptr; -@@ -1719,10 +1927,10 @@ limfield (struct line const *line, struct keyfield const *key) +@@ -1719,10 +1927,10 @@ */ /* Make LIM point to the end of (one byte past) the current field. */ @@ -3400,7 +3337,7 @@ index 3b775d6..a0ba243 100644 if (newlim) lim = newlim; } -@@ -1753,6 +1961,130 @@ limfield (struct line const *line, struct keyfield const *key) +@@ -1753,6 +1961,130 @@ return ptr; } @@ -3531,7 +3468,7 @@ index 3b775d6..a0ba243 100644 /* 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 -@@ -1839,8 +2171,22 @@ fillbuf (struct buffer *buf, FILE *fp, char const *file) +@@ -1839,8 +2171,22 @@ else { if (key->skipsblanks) @@ -3556,7 +3493,7 @@ index 3b775d6..a0ba243 100644 line->keybeg = line_start; } } -@@ -1976,12 +2322,10 @@ find_unit_order (char const *number) +@@ -1978,12 +2324,10 @@ ATTRIBUTE_PURE static int @@ -3572,7 +3509,7 @@ index 3b775d6..a0ba243 100644 int diff = find_unit_order (a) - find_unit_order (b); return (diff ? diff : strnumcmp (a, b, decimal_point, thousands_sep)); -@@ -1993,7 +2337,7 @@ human_numcompare (char const *a, char const *b) +@@ -1995,7 +2339,7 @@ ATTRIBUTE_PURE static int @@ -3581,7 +3518,7 @@ index 3b775d6..a0ba243 100644 { while (blanks[to_uchar (*a)]) a++; -@@ -2003,6 +2347,25 @@ numcompare (char const *a, char const *b) +@@ -2005,6 +2349,25 @@ return strnumcmp (a, b, decimal_point, thousands_sep); } @@ -3604,10 +3541,10 @@ index 3b775d6..a0ba243 100644 +} +#endif /* HAV_EMBRTOWC */ + - /* Work around a problem whereby the long double value returned by glibc's - strtold ("NaN", ...) contains uninitialized bits: clear all bytes of - A and B before calling strtold. FIXME: remove this function if -@@ -2053,7 +2416,7 @@ general_numcompare (char const *sa, char const *sb) + static int + nan_compare (long double a, long double b) + { +@@ -2046,7 +2409,7 @@ Return 0 if the name in S is not recognized. */ static int @@ -3616,7 +3553,7 @@ index 3b775d6..a0ba243 100644 { size_t lo = 0; size_t hi = MONTHS_PER_YEAR; -@@ -2329,15 +2692,14 @@ debug_key (struct line const *line, struct keyfield const *key) +@@ -2322,15 +2685,14 @@ char saved = *lim; *lim = '\0'; @@ -3634,7 +3571,7 @@ index 3b775d6..a0ba243 100644 else if (key->general_numeric) ignore_value (strtold (beg, &tighter_lim)); else if (key->numeric || key->human_numeric) -@@ -2483,7 +2845,7 @@ key_warnings (struct keyfield const *gkey, bool gkey_only) +@@ -2476,7 +2838,7 @@ /* 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 */ @@ -3643,7 +3580,7 @@ index 3b775d6..a0ba243 100644 && ((!key->skipsblanks && !implicit_skip) || (!key->skipsblanks && key->schar) || (!key->skipeblanks && key->echar))) -@@ -2531,9 +2893,9 @@ key_warnings (struct keyfield const *gkey, bool gkey_only) +@@ -2524,9 +2886,9 @@ bool number_locale_warned = false; if (basic_numeric_field_span) { @@ -3656,7 +3593,7 @@ index 3b775d6..a0ba243 100644 { error (0, 0, _("field separator %s is treated as a " -@@ -2544,9 +2906,9 @@ key_warnings (struct keyfield const *gkey, bool gkey_only) +@@ -2537,9 +2899,9 @@ } if (basic_numeric_field_span || general_numeric_field_span) { @@ -3669,7 +3606,7 @@ index 3b775d6..a0ba243 100644 { error (0, 0, _("field separator %s is treated as a " -@@ -2554,19 +2916,19 @@ key_warnings (struct keyfield const *gkey, bool gkey_only) +@@ -2547,19 +2909,19 @@ quote (((char []) {decimal_point, 0}))); number_locale_warned = true; } @@ -3693,7 +3630,7 @@ index 3b775d6..a0ba243 100644 } } -@@ -2577,7 +2939,7 @@ key_warnings (struct keyfield const *gkey, bool gkey_only) +@@ -2570,7 +2932,7 @@ { error (0, 0, _("%snumbers use %s as a decimal point in this locale"), @@ -3702,8 +3639,8 @@ index 3b775d6..a0ba243 100644 quote (((char []) {decimal_point, 0}))); } -@@ -2610,11 +2972,87 @@ key_warnings (struct keyfield const *gkey, bool gkey_only) - error (0, 0, _("option '-r' only applies to last-resort comparison")); +@@ -2612,11 +2974,87 @@ + return reversed ? (diff < 0) - (diff > 0) : diff; } +#if HAVE_MBRTOWC @@ -3791,7 +3728,7 @@ index 3b775d6..a0ba243 100644 { struct keyfield *key = keylist; -@@ -2699,7 +3137,7 @@ keycompare (struct line const *a, struct line const *b) +@@ -2697,7 +3135,7 @@ else if (key->human_numeric) diff = human_numcompare (ta, tb); else if (key->month) @@ -3800,8 +3737,8 @@ index 3b775d6..a0ba243 100644 else if (key->random) diff = compare_random (ta, tlena, tb, tlenb); else if (key->version) -@@ -2815,6 +3253,211 @@ keycompare (struct line const *a, struct line const *b) - return key->reverse ? -diff : diff; +@@ -2807,6 +3245,211 @@ + return diff_reversed (diff, key->reverse); } +#if HAVE_MBRTOWC @@ -4012,7 +3949,7 @@ index 3b775d6..a0ba243 100644 /* Compare two lines A and B, returning negative, zero, or positive depending on whether A compares less than, equal to, or greater than B. */ -@@ -2842,7 +3485,7 @@ compare (struct line const *a, struct line const *b) +@@ -2834,7 +3477,7 @@ diff = - NONZERO (blen); else if (blen == 0) diff = 1; @@ -4021,7 +3958,7 @@ index 3b775d6..a0ba243 100644 { /* xmemcoll0 is a performance enhancement as it will not unconditionally write '\0' after the -@@ -4226,6 +4869,7 @@ set_ordering (char const *s, struct keyfield *key, enum blanktype blanktype) +@@ -4222,6 +4865,7 @@ break; case 'f': key->translate = fold_toupper; @@ -4029,7 +3966,7 @@ index 3b775d6..a0ba243 100644 break; case 'g': key->general_numeric = true; -@@ -4305,7 +4949,7 @@ main (int argc, char **argv) +@@ -4301,7 +4945,7 @@ initialize_exit_failure (SORT_FAILURE); hard_LC_COLLATE = hard_locale (LC_COLLATE); @@ -4038,7 +3975,7 @@ index 3b775d6..a0ba243 100644 hard_LC_TIME = hard_locale (LC_TIME); #endif -@@ -4328,6 +4972,29 @@ main (int argc, char **argv) +@@ -4324,6 +4968,29 @@ thousands_sep = NON_CHAR; } @@ -4068,7 +4005,7 @@ index 3b775d6..a0ba243 100644 have_read_stdin = false; inittables (); -@@ -4602,13 +5269,34 @@ main (int argc, char **argv) +@@ -4598,13 +5265,34 @@ case 't': { @@ -4107,7 +4044,7 @@ index 3b775d6..a0ba243 100644 else { /* Provoke with 'sort -txx'. Complain about -@@ -4619,9 +5307,11 @@ main (int argc, char **argv) +@@ -4615,9 +5303,11 @@ quote (optarg)); } } @@ -4121,10 +4058,9 @@ index 3b775d6..a0ba243 100644 } break; -diff --git a/src/unexpand.c b/src/unexpand.c -index 7d6100f..04cd646 100644 ---- a/src/unexpand.c -+++ b/src/unexpand.c +diff --color -Naur coreutils-9.2/src/unexpand.c coreutils-9.2-i18n/src/unexpand.c +--- coreutils-9.2/src/unexpand.c 2023-03-14 02:08:10.000000000 +0800 ++++ coreutils-9.2-i18n/src/unexpand.c 2023-03-21 20:04:28.987528159 +0800 @@ -38,6 +38,9 @@ #include #include @@ -4135,7 +4071,7 @@ index 7d6100f..04cd646 100644 #include "system.h" #include "die.h" -@@ -106,24 +109,47 @@ unexpand (void) +@@ -106,24 +109,47 @@ { /* Input stream. */ FILE *fp = next_file (NULL); @@ -4157,11 +4093,11 @@ index 7d6100f..04cd646 100644 return; + mbf_init (mbf, fp); + found_bom=check_bom(fp,&mbf); -+ + + if (using_utf_locale == false && found_bom == true) + { + /*try using some predefined locale */ - ++ + if (set_utf_locale () != 0) + { + error (EXIT_FAILURE, errno, _("cannot set UTF-8 locale")); @@ -4186,7 +4122,7 @@ index 7d6100f..04cd646 100644 /* If true, perform translations. */ bool convert = true; -@@ -157,12 +183,44 @@ unexpand (void) +@@ -157,12 +183,44 @@ do { @@ -4234,7 +4170,7 @@ index 7d6100f..04cd646 100644 if (blank) { -@@ -179,16 +237,16 @@ unexpand (void) +@@ -179,16 +237,16 @@ if (next_tab_column < column) die (EXIT_FAILURE, 0, _("input line is too long")); @@ -4254,7 +4190,7 @@ index 7d6100f..04cd646 100644 if (! (prev_blank && column == next_tab_column)) { -@@ -196,13 +254,14 @@ unexpand (void) +@@ -196,13 +254,14 @@ will be replaced by tabs. */ if (column == next_tab_column) one_blank_before_tab_stop = true; @@ -4271,7 +4207,7 @@ index 7d6100f..04cd646 100644 } /* Discard pending blanks, unless it was a single -@@ -210,7 +269,7 @@ unexpand (void) +@@ -210,7 +269,7 @@ pending = one_blank_before_tab_stop; } } @@ -4280,19 +4216,18 @@ index 7d6100f..04cd646 100644 { /* Go back one column, and force recalculation of the next tab stop. */ -@@ -218,9 +277,9 @@ unexpand (void) - next_tab_column = column; - tab_index -= !!tab_index; +@@ -220,16 +279,20 @@ } -- else -+ else if (!mb_iseq (c, '\n')) + else { - column++; +- if (!column) ++ const uintmax_t orig_column = column; + column += mb_width (c); - if (!column) ++ if (column < orig_column) die (EXIT_FAILURE, 0, _("input line is too long")); } -@@ -228,8 +287,11 @@ unexpand (void) + if (pending) { if (pending > 1 && one_blank_before_tab_stop) @@ -4306,7 +4241,7 @@ index 7d6100f..04cd646 100644 die (EXIT_FAILURE, errno, _("write error")); pending = 0; one_blank_before_tab_stop = false; -@@ -239,16 +301,17 @@ unexpand (void) +@@ -239,16 +302,17 @@ convert &= convert_entire_line || blank; } @@ -4327,10 +4262,9 @@ index 7d6100f..04cd646 100644 } } -diff --git a/src/uniq.c b/src/uniq.c -index e5996f0..871d47c 100644 ---- a/src/uniq.c -+++ b/src/uniq.c +diff --color -Naur coreutils-9.2/src/uniq.c coreutils-9.2-i18n/src/uniq.c +--- coreutils-9.2/src/uniq.c 2023-03-14 02:08:10.000000000 +0800 ++++ coreutils-9.2-i18n/src/uniq.c 2023-03-21 20:04:28.987528159 +0800 @@ -21,6 +21,17 @@ #include #include @@ -4368,7 +4302,7 @@ index e5996f0..871d47c 100644 /* The official name of this program (e.g., no 'g' prefix). */ #define PROGRAM_NAME "uniq" -@@ -139,6 +162,10 @@ enum +@@ -139,6 +162,10 @@ GROUP_OPTION = CHAR_MAX + 1 }; @@ -4379,7 +4313,7 @@ index e5996f0..871d47c 100644 static struct option const longopts[] = { {"count", no_argument, NULL, 'c'}, -@@ -254,7 +281,7 @@ size_opt (char const *opt, char const *msgid) +@@ -254,7 +281,7 @@ ATTRIBUTE_PURE static char * @@ -4388,7 +4322,7 @@ index e5996f0..871d47c 100644 { size_t count; char const *lp = line->buffer; -@@ -274,6 +301,83 @@ find_field (struct linebuffer const *line) +@@ -274,6 +301,83 @@ return line->buffer + i; } @@ -4472,7 +4406,7 @@ index e5996f0..871d47c 100644 /* Return false if two strings OLD and NEW match, true if not. OLD and NEW point not to the beginnings of the lines but rather to the beginnings of the fields to compare. -@@ -494,6 +598,19 @@ main (int argc, char **argv) +@@ -494,6 +598,19 @@ atexit (close_stdout); @@ -4492,11 +4426,10 @@ index e5996f0..871d47c 100644 skip_chars = 0; skip_fields = 0; check_chars = SIZE_MAX; -diff --git a/tests/Coreutils.pm b/tests/Coreutils.pm -index fad7ab9..c9021a6 100644 ---- a/tests/Coreutils.pm -+++ b/tests/Coreutils.pm -@@ -264,6 +264,9 @@ sub run_tests ($$$$$) +diff --color -Naur coreutils-9.2/tests/Coreutils.pm coreutils-9.2-i18n/tests/Coreutils.pm +--- coreutils-9.2/tests/Coreutils.pm 2023-03-14 02:08:10.000000000 +0800 ++++ coreutils-9.2-i18n/tests/Coreutils.pm 2023-03-21 20:04:28.987528159 +0800 +@@ -269,6 +269,9 @@ # Yes, this is an arbitrary limit. If it causes trouble, # consider removing it. my $max = 30; @@ -4506,11 +4439,9 @@ index fad7ab9..c9021a6 100644 if ($max < length $test_name) { warn "$program_name: $test_name: test name is too long (> $max)\n"; -diff --git a/tests/expand/mb.sh b/tests/expand/mb.sh -new file mode 100755 -index 0000000..dd6007c ---- /dev/null -+++ b/tests/expand/mb.sh +diff --color -Naur coreutils-9.2/tests/expand/mb.sh coreutils-9.2-i18n/tests/expand/mb.sh +--- coreutils-9.2/tests/expand/mb.sh 1970-01-01 08:00:00.000000000 +0800 ++++ coreutils-9.2-i18n/tests/expand/mb.sh 2023-03-21 20:04:28.987528159 +0800 @@ -0,0 +1,183 @@ +#!/bin/sh + @@ -4695,11 +4626,9 @@ index 0000000..dd6007c +compare exp out > /dev/null 2>&1 || fail=1 + +exit $fail -diff --git a/tests/i18n/sort.sh b/tests/i18n/sort.sh -new file mode 100755 -index 0000000..26c95de ---- /dev/null -+++ b/tests/i18n/sort.sh +diff --color -Naur coreutils-9.2/tests/i18n/sort.sh coreutils-9.2-i18n/tests/i18n/sort.sh +--- coreutils-9.2/tests/i18n/sort.sh 1970-01-01 08:00:00.000000000 +0800 ++++ coreutils-9.2-i18n/tests/i18n/sort.sh 2023-03-21 20:04:28.987528159 +0800 @@ -0,0 +1,29 @@ +#!/bin/sh +# Verify sort's multi-byte support. @@ -4730,11 +4659,10 @@ index 0000000..26c95de + + +Exit $fail -diff --git a/tests/local.mk b/tests/local.mk -index 0f77786..dbe1843 100644 ---- a/tests/local.mk -+++ b/tests/local.mk -@@ -377,6 +377,8 @@ all_tests = \ +diff --color -Naur coreutils-9.2/tests/local.mk coreutils-9.2-i18n/tests/local.mk +--- coreutils-9.2/tests/local.mk 2023-03-14 02:08:10.000000000 +0800 ++++ coreutils-9.2-i18n/tests/local.mk 2023-03-21 20:04:28.987528159 +0800 +@@ -381,6 +381,8 @@ tests/misc/sort-discrim.sh \ tests/misc/sort-files0-from.pl \ tests/misc/sort-float.sh \ @@ -4743,7 +4671,7 @@ index 0f77786..dbe1843 100644 tests/misc/sort-h-thousands-sep.sh \ tests/misc/sort-merge.pl \ tests/misc/sort-merge-fdlimit.sh \ -@@ -576,6 +578,7 @@ all_tests = \ +@@ -582,6 +584,7 @@ tests/du/threshold.sh \ tests/du/trailing-slash.sh \ tests/du/two-args.sh \ @@ -4751,7 +4679,7 @@ index 0f77786..dbe1843 100644 tests/id/gnu-zero-uids.sh \ tests/id/no-context.sh \ tests/id/context.sh \ -@@ -727,6 +730,7 @@ all_tests = \ +@@ -734,6 +737,7 @@ tests/touch/read-only.sh \ tests/touch/relative.sh \ tests/touch/trailing-slash.sh \ @@ -4759,11 +4687,10 @@ index 0f77786..dbe1843 100644 $(all_root_tests) # See tests/factor/create-test.sh. -diff --git a/tests/misc/expand.pl b/tests/misc/expand.pl -index 7a77e6f..27f6652 100755 ---- a/tests/misc/expand.pl -+++ b/tests/misc/expand.pl -@@ -27,6 +27,15 @@ my $prog = 'expand'; +diff --color -Naur coreutils-9.2/tests/misc/expand.pl coreutils-9.2-i18n/tests/misc/expand.pl +--- coreutils-9.2/tests/misc/expand.pl 2023-03-14 02:08:10.000000000 +0800 ++++ coreutils-9.2-i18n/tests/misc/expand.pl 2023-03-21 20:04:28.988528143 +0800 +@@ -27,6 +27,15 @@ # Turn off localization of executable's output. @ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3; @@ -4779,7 +4706,7 @@ index 7a77e6f..27f6652 100755 my @Tests = ( ['t1', '--tabs=3', {IN=>"a\tb"}, {OUT=>"a b"}], -@@ -168,6 +177,8 @@ my @Tests = +@@ -168,6 +177,8 @@ # Test errors @@ -4788,7 +4715,7 @@ index 7a77e6f..27f6652 100755 ['e1', '--tabs="a"', {IN=>''}, {OUT=>''}, {EXIT=>1}, {ERR => "$prog: tab size contains invalid character(s): 'a'\n"}], ['e2', "-t $UINTMAX_OFLOW", {IN=>''}, {OUT=>''}, {EXIT=>1}, -@@ -184,6 +195,37 @@ my @Tests = +@@ -184,6 +195,37 @@ {ERR => "$prog: '/' specifier not at start of number: '/'\n"}], ); @@ -4826,11 +4753,10 @@ index 7a77e6f..27f6652 100755 my $save_temps = $ENV{DEBUG}; my $verbose = $ENV{VERBOSE}; -diff --git a/tests/misc/fold.pl b/tests/misc/fold.pl -index 2834f92..bc1616a 100755 ---- a/tests/misc/fold.pl -+++ b/tests/misc/fold.pl -@@ -20,9 +20,18 @@ use strict; +diff --color -Naur coreutils-9.2/tests/misc/fold.pl coreutils-9.2-i18n/tests/misc/fold.pl +--- coreutils-9.2/tests/misc/fold.pl 2023-03-14 02:08:10.000000000 +0800 ++++ coreutils-9.2-i18n/tests/misc/fold.pl 2023-03-21 20:04:28.988528143 +0800 +@@ -20,9 +20,18 @@ (my $program_name = $0) =~ s|.*/||; @@ -4849,7 +4775,7 @@ index 2834f92..bc1616a 100755 my @Tests = ( ['s1', '-w2 -s', {IN=>"a\t"}, {OUT=>"a\n\t"}], -@@ -31,9 +40,48 @@ my @Tests = +@@ -31,9 +40,48 @@ ['s4', '-w4 -s', {IN=>"abc ef\n"}, {OUT=>"abc \nef\n"}], ); @@ -4899,11 +4825,10 @@ index 2834f92..bc1616a 100755 -my $prog = 'fold'; my $fail = run_tests ($program_name, $prog, \@Tests, $save_temps, $verbose); exit $fail; -diff --git a/tests/misc/join.pl b/tests/misc/join.pl -index 06ad777..be40204 100755 ---- a/tests/misc/join.pl -+++ b/tests/misc/join.pl -@@ -25,6 +25,15 @@ my $limits = getlimits (); +diff --color -Naur coreutils-9.2/tests/misc/join.pl coreutils-9.2-i18n/tests/misc/join.pl +--- coreutils-9.2/tests/misc/join.pl 2023-03-14 02:08:10.000000000 +0800 ++++ coreutils-9.2-i18n/tests/misc/join.pl 2023-03-21 20:04:28.988528143 +0800 +@@ -25,6 +25,15 @@ my $prog = 'join'; @@ -4919,7 +4844,7 @@ index 06ad777..be40204 100755 my $delim = chr 0247; sub t_subst ($) { -@@ -333,8 +342,49 @@ foreach my $t (@tv) +@@ -333,8 +342,49 @@ push @Tests, $new_ent; } @@ -4969,11 +4894,9 @@ index 06ad777..be40204 100755 my $save_temps = $ENV{DEBUG}; my $verbose = $ENV{VERBOSE}; -diff --git a/tests/misc/sort-mb-tests.sh b/tests/misc/sort-mb-tests.sh -new file mode 100755 -index 0000000..11836ba ---- /dev/null -+++ b/tests/misc/sort-mb-tests.sh +diff --color -Naur coreutils-9.2/tests/misc/sort-mb-tests.sh coreutils-9.2-i18n/tests/misc/sort-mb-tests.sh +--- coreutils-9.2/tests/misc/sort-mb-tests.sh 1970-01-01 08:00:00.000000000 +0800 ++++ coreutils-9.2-i18n/tests/misc/sort-mb-tests.sh 2023-03-21 20:04:28.988528143 +0800 @@ -0,0 +1,45 @@ +#!/bin/sh +# Verify sort's multi-byte support. @@ -5020,11 +4943,10 @@ index 0000000..11836ba +compare exp out || { fail=1; cat out; } + +Exit $fail -diff --git a/tests/misc/sort-merge.pl b/tests/misc/sort-merge.pl -index 7eb4574..eda884c 100755 ---- a/tests/misc/sort-merge.pl -+++ b/tests/misc/sort-merge.pl -@@ -26,6 +26,15 @@ my $prog = 'sort'; +diff --color -Naur coreutils-9.2/tests/misc/sort-merge.pl coreutils-9.2-i18n/tests/misc/sort-merge.pl +--- coreutils-9.2/tests/misc/sort-merge.pl 2023-03-14 02:08:10.000000000 +0800 ++++ coreutils-9.2-i18n/tests/misc/sort-merge.pl 2023-03-21 20:04:28.988528143 +0800 +@@ -26,6 +26,15 @@ # Turn off localization of executable's output. @ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3; @@ -5040,7 +4962,7 @@ index 7eb4574..eda884c 100755 # 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 = +@@ -77,6 +86,39 @@ {OUT=>$big_input}], ); @@ -5080,11 +5002,10 @@ index 7eb4574..eda884c 100755 my $save_temps = $ENV{DEBUG}; my $verbose = $ENV{VERBOSE}; -diff --git a/tests/misc/sort.pl b/tests/misc/sort.pl -index 0b0adca..fd27821 100755 ---- a/tests/misc/sort.pl -+++ b/tests/misc/sort.pl -@@ -24,10 +24,15 @@ my $prog = 'sort'; +diff --color -Naur coreutils-9.2/tests/misc/sort.pl coreutils-9.2-i18n/tests/misc/sort.pl +--- coreutils-9.2/tests/misc/sort.pl 2023-03-14 02:08:10.000000000 +0800 ++++ coreutils-9.2-i18n/tests/misc/sort.pl 2023-03-21 20:04:28.988528143 +0800 +@@ -24,10 +24,15 @@ # Turn off localization of executable's output. @ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3; @@ -5101,7 +5022,7 @@ index 0b0adca..fd27821 100755 # 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 '-'. -@@ -423,6 +428,38 @@ foreach my $t (@Tests) +@@ -423,6 +428,38 @@ } } @@ -5140,7 +5061,7 @@ index 0b0adca..fd27821 100755 @Tests = triple_test \@Tests; # Remember that triple_test creates from each test with exactly one "IN" -@@ -432,6 +469,7 @@ foreach my $t (@Tests) +@@ -432,6 +469,7 @@ # 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; @@ -5148,11 +5069,10 @@ index 0b0adca..fd27821 100755 my $save_temps = $ENV{DEBUG}; my $verbose = $ENV{VERBOSE}; -diff --git a/tests/misc/unexpand.pl b/tests/misc/unexpand.pl -index 2e1906f..fe66012 100755 ---- a/tests/misc/unexpand.pl -+++ b/tests/misc/unexpand.pl -@@ -27,6 +27,14 @@ my $limits = getlimits (); +diff --color -Naur coreutils-9.2/tests/misc/unexpand.pl coreutils-9.2-i18n/tests/misc/unexpand.pl +--- coreutils-9.2/tests/misc/unexpand.pl 2023-03-14 02:08:10.000000000 +0800 ++++ coreutils-9.2-i18n/tests/misc/unexpand.pl 2023-03-21 20:04:28.988528143 +0800 +@@ -27,6 +27,14 @@ my $prog = 'unexpand'; @@ -5167,7 +5087,7 @@ index 2e1906f..fe66012 100755 my @Tests = ( ['a1', {IN=> ' 'x 1 ."y\n"}, {OUT=> ' 'x 1 ."y\n"}], -@@ -128,6 +136,37 @@ my @Tests = +@@ -128,6 +136,37 @@ ['ts2', '-t5,8', {IN=>"x\t \t y\n"}, {OUT=>"x\t\t y\n"}], ); @@ -5205,11 +5125,10 @@ index 2e1906f..fe66012 100755 my $save_temps = $ENV{DEBUG}; my $verbose = $ENV{VERBOSE}; -diff --git a/tests/misc/uniq.pl b/tests/misc/uniq.pl -index aa163cd..91d617d 100755 ---- a/tests/misc/uniq.pl -+++ b/tests/misc/uniq.pl -@@ -23,9 +23,17 @@ my $limits = getlimits (); +diff --color -Naur coreutils-9.2/tests/misc/uniq.pl coreutils-9.2-i18n/tests/misc/uniq.pl +--- coreutils-9.2/tests/misc/uniq.pl 2023-03-14 02:08:10.000000000 +0800 ++++ coreutils-9.2-i18n/tests/misc/uniq.pl 2023-03-21 20:04:28.988528143 +0800 +@@ -23,9 +23,17 @@ my $prog = 'uniq'; my $try = "Try '$prog --help' for more information.\n"; @@ -5227,7 +5146,7 @@ index aa163cd..91d617d 100755 # When possible, create a "-z"-testing variant of each test. sub add_z_variants($) { -@@ -262,6 +270,53 @@ foreach my $t (@Tests) +@@ -262,6 +270,53 @@ and push @$t, {ENV=>'_POSIX2_VERSION=199209'}; } @@ -5281,11 +5200,10 @@ index aa163cd..91d617d 100755 @Tests = add_z_variants \@Tests; @Tests = triple_test \@Tests; -diff --git a/tests/pr/pr-tests.pl b/tests/pr/pr-tests.pl -index 7ac6d4c..ae6cc35 100755 ---- a/tests/pr/pr-tests.pl -+++ b/tests/pr/pr-tests.pl -@@ -24,6 +24,15 @@ use strict; +diff --color -Naur coreutils-9.2/tests/pr/pr-tests.pl coreutils-9.2-i18n/tests/pr/pr-tests.pl +--- coreutils-9.2/tests/pr/pr-tests.pl 2023-03-14 02:08:10.000000000 +0800 ++++ coreutils-9.2-i18n/tests/pr/pr-tests.pl 2023-03-21 20:04:28.988528143 +0800 +@@ -24,6 +24,15 @@ my $prog = 'pr'; my $normalize_strerror = "s/': .*/'/"; @@ -5301,7 +5219,7 @@ index 7ac6d4c..ae6cc35 100755 my @tv = ( # -b option is no longer an official option. But it's still working to -@@ -512,8 +521,48 @@ push @Tests, +@@ -512,8 +521,48 @@ {IN=>"x\tx\tx\tx\tx\nx\tx\tx\tx\tx\n"}, {OUT=>"x\tx\tx\tx\tx\tx\tx\tx\tx\tx\n"} ]; @@ -5350,11 +5268,9 @@ index 7ac6d4c..ae6cc35 100755 my $save_temps = $ENV{DEBUG}; my $verbose = $ENV{VERBOSE}; -diff --git a/tests/unexpand/mb.sh b/tests/unexpand/mb.sh -new file mode 100755 -index 0000000..8a82d74 ---- /dev/null -+++ b/tests/unexpand/mb.sh +diff --color -Naur coreutils-9.2/tests/unexpand/mb.sh coreutils-9.2-i18n/tests/unexpand/mb.sh +--- coreutils-9.2/tests/unexpand/mb.sh 1970-01-01 08:00:00.000000000 +0800 ++++ coreutils-9.2-i18n/tests/unexpand/mb.sh 2023-03-21 20:04:28.988528143 +0800 @@ -0,0 +1,172 @@ +#!/bin/sh + @@ -5528,6 +5444,3 @@ index 0000000..8a82d74 + +LC_ALL=C unexpand in in > out || fail=1 +compare exp out > /dev/null 2>&1 || fail=1 --- -2.34.1 - diff --git a/coreutils.spec b/coreutils.spec index 755850b..72ee067 100644 --- a/coreutils.spec +++ b/coreutils.spec @@ -1,6 +1,6 @@ %define i18npatch_version %{version} Name: coreutils -Version: 9.1 +Version: 9.2 Release: 1mamba Summary: A GNU set of tools commonly used in shell scripts Group: System/Tools @@ -98,7 +98,7 @@ Most of these programs have significant advantages over their Unix counterparts, #%patch0 -p1 -b .langinfo # lin18nux/LSB compliance -%patch2 -p1 -b .i18n +%patch 2 -p1 -b .i18n autoreconf -fiv @@ -208,6 +208,9 @@ done %doc AUTHORS THANKS %changelog +* Tue Mar 21 2023 Automatic Build System 9.2-1mamba +- automatic version update by autodist + * Sun Aug 21 2022 Automatic Build System 9.1-1mamba - automatic version update by autodist