fix uniq group support in multibyte
This commit is contained in:
parent
3a87513acc
commit
8ff0950897
@ -1,6 +1,6 @@
|
||||
diff -urNp coreutils-8.21-orig/lib/linebuffer.h coreutils-8.21/lib/linebuffer.h
|
||||
--- coreutils-8.21-orig/lib/linebuffer.h 2013-01-02 13:34:46.000000000 +0100
|
||||
+++ coreutils-8.21/lib/linebuffer.h 2013-02-15 14:25:07.758469108 +0100
|
||||
diff -urNp coreutils-8.22-orig/lib/linebuffer.h coreutils-8.22/lib/linebuffer.h
|
||||
--- coreutils-8.22-orig/lib/linebuffer.h 2013-12-04 15:53:33.000000000 +0100
|
||||
+++ coreutils-8.22/lib/linebuffer.h 2013-12-16 17:40:25.933887985 +0100
|
||||
@@ -21,6 +21,11 @@
|
||||
|
||||
# include <stdio.h>
|
||||
@ -23,9 +23,9 @@ diff -urNp coreutils-8.21-orig/lib/linebuffer.h coreutils-8.21/lib/linebuffer.h
|
||||
};
|
||||
|
||||
/* Initialize linebuffer LINEBUFFER for use. */
|
||||
diff -urNp coreutils-8.21-orig/src/cut.c coreutils-8.21/src/cut.c
|
||||
--- coreutils-8.21-orig/src/cut.c 2013-02-05 00:40:31.000000000 +0100
|
||||
+++ coreutils-8.21/src/cut.c 2013-02-15 14:25:07.760467982 +0100
|
||||
diff -urNp coreutils-8.22-orig/src/cut.c coreutils-8.22/src/cut.c
|
||||
--- coreutils-8.22-orig/src/cut.c 2013-12-04 15:48:30.000000000 +0100
|
||||
+++ coreutils-8.22/src/cut.c 2013-12-16 17:40:25.935887295 +0100
|
||||
@@ -28,6 +28,11 @@
|
||||
#include <assert.h>
|
||||
#include <getopt.h>
|
||||
@ -110,7 +110,7 @@ diff -urNp coreutils-8.21-orig/src/cut.c coreutils-8.21/src/cut.c
|
||||
|
||||
struct range_pair
|
||||
{
|
||||
@@ -114,15 +178,25 @@ enum operating_mode
|
||||
@@ -106,15 +169,25 @@ enum operating_mode
|
||||
{
|
||||
undefined_mode,
|
||||
|
||||
@ -137,7 +137,7 @@ diff -urNp coreutils-8.21-orig/src/cut.c coreutils-8.21/src/cut.c
|
||||
/* If true do not output lines containing no delimeter characters.
|
||||
Otherwise, all such lines are printed. This option is valid only
|
||||
with field mode. */
|
||||
@@ -134,6 +208,9 @@ static bool complement;
|
||||
@@ -126,6 +199,9 @@ static bool complement;
|
||||
|
||||
/* The delimeter character for field mode. */
|
||||
static unsigned char delim;
|
||||
@ -147,7 +147,7 @@ diff -urNp coreutils-8.21-orig/src/cut.c coreutils-8.21/src/cut.c
|
||||
|
||||
/* True if the --output-delimiter=STRING option was specified. */
|
||||
static bool output_delimiter_specified;
|
||||
@@ -205,7 +282,7 @@ Print selected parts of lines from each
|
||||
@@ -188,7 +264,7 @@ Print selected parts of lines from each
|
||||
-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\
|
||||
@ -156,7 +156,7 @@ diff -urNp coreutils-8.21-orig/src/cut.c coreutils-8.21/src/cut.c
|
||||
"), stdout);
|
||||
fputs (_("\
|
||||
--complement complement the set of selected bytes, characters\n\
|
||||
@@ -480,6 +557,9 @@ set_fields (const char *fieldstr)
|
||||
@@ -381,6 +457,9 @@ set_fields (const char *fieldstr)
|
||||
if (operating_mode == byte_mode)
|
||||
error (0, 0,
|
||||
_("byte offset %s is too large"), quote (bad_num));
|
||||
@ -449,7 +449,7 @@ diff -urNp coreutils-8.21-orig/src/cut.c coreutils-8.21/src/cut.c
|
||||
}
|
||||
|
||||
/* Process file FILE to standard output.
|
||||
@@ -767,6 +1100,8 @@ main (int argc, char **argv)
|
||||
@@ -687,6 +1025,8 @@ main (int argc, char **argv)
|
||||
bool ok;
|
||||
bool delim_specified = false;
|
||||
char *spec_list_string IF_LINT ( = NULL);
|
||||
@ -458,7 +458,7 @@ diff -urNp coreutils-8.21-orig/src/cut.c coreutils-8.21/src/cut.c
|
||||
|
||||
initialize_main (&argc, &argv);
|
||||
set_program_name (argv[0]);
|
||||
@@ -789,7 +1124,6 @@ main (int argc, char **argv)
|
||||
@@ -709,7 +1049,6 @@ main (int argc, char **argv)
|
||||
switch (optc)
|
||||
{
|
||||
case 'b':
|
||||
@ -466,7 +466,7 @@ diff -urNp coreutils-8.21-orig/src/cut.c coreutils-8.21/src/cut.c
|
||||
/* Build the byte list. */
|
||||
if (operating_mode != undefined_mode)
|
||||
FATAL_ERROR (_("only one type of list may be specified"));
|
||||
@@ -797,6 +1131,14 @@ main (int argc, char **argv)
|
||||
@@ -717,6 +1056,14 @@ main (int argc, char **argv)
|
||||
spec_list_string = optarg;
|
||||
break;
|
||||
|
||||
@ -481,7 +481,7 @@ diff -urNp coreutils-8.21-orig/src/cut.c coreutils-8.21/src/cut.c
|
||||
case 'f':
|
||||
/* Build the field list. */
|
||||
if (operating_mode != undefined_mode)
|
||||
@@ -808,10 +1150,36 @@ main (int argc, char **argv)
|
||||
@@ -728,10 +1075,36 @@ main (int argc, char **argv)
|
||||
case 'd':
|
||||
/* New delimiter. */
|
||||
/* Interpret -d '' to mean 'use the NUL byte as the delimiter.' */
|
||||
@ -522,7 +522,7 @@ diff -urNp coreutils-8.21-orig/src/cut.c coreutils-8.21/src/cut.c
|
||||
break;
|
||||
|
||||
case OUTPUT_DELIMITER_OPTION:
|
||||
@@ -824,6 +1191,7 @@ main (int argc, char **argv)
|
||||
@@ -744,6 +1117,7 @@ main (int argc, char **argv)
|
||||
break;
|
||||
|
||||
case 'n':
|
||||
@ -530,7 +530,7 @@ diff -urNp coreutils-8.21-orig/src/cut.c coreutils-8.21/src/cut.c
|
||||
break;
|
||||
|
||||
case 's':
|
||||
@@ -873,15 +1241,34 @@ main (int argc, char **argv)
|
||||
@@ -783,15 +1157,34 @@ main (int argc, char **argv)
|
||||
}
|
||||
|
||||
if (!delim_specified)
|
||||
@ -571,9 +571,9 @@ diff -urNp coreutils-8.21-orig/src/cut.c coreutils-8.21/src/cut.c
|
||||
}
|
||||
|
||||
if (optind == argc)
|
||||
diff -urNp coreutils-8.21-orig/src/expand.c coreutils-8.21/src/expand.c
|
||||
--- coreutils-8.21-orig/src/expand.c 2013-01-31 01:46:24.000000000 +0100
|
||||
+++ coreutils-8.21/src/expand.c 2013-02-15 14:25:07.774467536 +0100
|
||||
diff -urNp coreutils-8.22-orig/src/expand.c coreutils-8.22/src/expand.c
|
||||
--- coreutils-8.22-orig/src/expand.c 2013-12-04 15:48:30.000000000 +0100
|
||||
+++ coreutils-8.22/src/expand.c 2013-12-16 17:40:25.936886952 +0100
|
||||
@@ -37,12 +37,29 @@
|
||||
#include <stdio.h>
|
||||
#include <getopt.h>
|
||||
@ -761,9 +761,9 @@ diff -urNp coreutils-8.21-orig/src/expand.c coreutils-8.21/src/expand.c
|
||||
|
||||
if (have_read_stdin && fclose (stdin) != 0)
|
||||
error (EXIT_FAILURE, errno, "-");
|
||||
diff -urNp coreutils-8.21-orig/src/fold.c coreutils-8.21/src/fold.c
|
||||
--- coreutils-8.21-orig/src/fold.c 2013-01-31 01:46:24.000000000 +0100
|
||||
+++ coreutils-8.21/src/fold.c 2013-02-15 14:25:07.789467891 +0100
|
||||
diff -urNp coreutils-8.22-orig/src/fold.c coreutils-8.22/src/fold.c
|
||||
--- coreutils-8.22-orig/src/fold.c 2013-12-04 15:48:30.000000000 +0100
|
||||
+++ coreutils-8.22/src/fold.c 2013-12-16 17:40:25.938886274 +0100
|
||||
@@ -22,12 +22,34 @@
|
||||
#include <getopt.h>
|
||||
#include <sys/types.h>
|
||||
@ -1161,9 +1161,9 @@ diff -urNp coreutils-8.21-orig/src/fold.c coreutils-8.21/src/fold.c
|
||||
break;
|
||||
|
||||
case 's': /* Break at word boundaries. */
|
||||
diff -urNp coreutils-8.21-orig/src/join.c coreutils-8.21/src/join.c
|
||||
--- coreutils-8.21-orig/src/join.c 2013-01-31 01:46:24.000000000 +0100
|
||||
+++ coreutils-8.21/src/join.c 2013-02-15 14:25:07.804467922 +0100
|
||||
diff -urNp coreutils-8.22-orig/src/join.c coreutils-8.22/src/join.c
|
||||
--- coreutils-8.22-orig/src/join.c 2013-12-04 15:48:30.000000000 +0100
|
||||
+++ coreutils-8.22/src/join.c 2013-12-16 17:40:25.940885607 +0100
|
||||
@@ -22,18 +22,32 @@
|
||||
#include <sys/types.h>
|
||||
#include <getopt.h>
|
||||
@ -1215,7 +1215,7 @@ diff -urNp coreutils-8.21-orig/src/join.c coreutils-8.21/src/join.c
|
||||
|
||||
/* If nonzero, check that the input is correctly ordered. */
|
||||
static enum
|
||||
@@ -262,13 +278,14 @@ xfields (struct line *line)
|
||||
@@ -269,13 +285,14 @@ xfields (struct line *line)
|
||||
if (ptr == lim)
|
||||
return;
|
||||
|
||||
@ -1233,7 +1233,7 @@ diff -urNp coreutils-8.21-orig/src/join.c coreutils-8.21/src/join.c
|
||||
{
|
||||
/* Skip leading blanks before the first field. */
|
||||
while (isblank (to_uchar (*ptr)))
|
||||
@@ -292,6 +309,148 @@ xfields (struct line *line)
|
||||
@@ -299,6 +316,148 @@ xfields (struct line *line)
|
||||
extract_field (line, ptr, lim - ptr);
|
||||
}
|
||||
|
||||
@ -1382,7 +1382,7 @@ diff -urNp coreutils-8.21-orig/src/join.c coreutils-8.21/src/join.c
|
||||
static void
|
||||
freeline (struct line *line)
|
||||
{
|
||||
@@ -313,56 +472,130 @@ keycmp (struct line const *line1, struct
|
||||
@@ -320,56 +479,130 @@ keycmp (struct line const *line1, struct
|
||||
size_t jf_1, size_t jf_2)
|
||||
{
|
||||
/* Start of field to compare in each file. */
|
||||
@ -1536,7 +1536,7 @@ diff -urNp coreutils-8.21-orig/src/join.c coreutils-8.21/src/join.c
|
||||
}
|
||||
|
||||
/* Check that successive input lines PREV and CURRENT from input file
|
||||
@@ -454,6 +687,11 @@ get_line (FILE *fp, struct line **linep,
|
||||
@@ -461,6 +694,11 @@ get_line (FILE *fp, struct line **linep,
|
||||
}
|
||||
++line_no[which - 1];
|
||||
|
||||
@ -1548,7 +1548,7 @@ diff -urNp coreutils-8.21-orig/src/join.c coreutils-8.21/src/join.c
|
||||
xfields (line);
|
||||
|
||||
if (prevline[which - 1])
|
||||
@@ -553,21 +791,28 @@ prfield (size_t n, struct line const *li
|
||||
@@ -560,21 +798,28 @@ prfield (size_t n, struct line const *li
|
||||
|
||||
/* Output all the fields in line, other than the join field. */
|
||||
|
||||
@ -1580,7 +1580,7 @@ diff -urNp coreutils-8.21-orig/src/join.c coreutils-8.21/src/join.c
|
||||
prfield (i, line);
|
||||
}
|
||||
}
|
||||
@@ -578,7 +823,6 @@ static void
|
||||
@@ -585,7 +830,6 @@ static void
|
||||
prjoin (struct line const *line1, struct line const *line2)
|
||||
{
|
||||
const struct outlist *outlist;
|
||||
@ -1588,7 +1588,7 @@ diff -urNp coreutils-8.21-orig/src/join.c coreutils-8.21/src/join.c
|
||||
size_t field;
|
||||
struct line const *line;
|
||||
|
||||
@@ -612,7 +856,7 @@ prjoin (struct line const *line1, struct
|
||||
@@ -619,7 +863,7 @@ prjoin (struct line const *line1, struct
|
||||
o = o->next;
|
||||
if (o == NULL)
|
||||
break;
|
||||
@ -1597,7 +1597,7 @@ diff -urNp coreutils-8.21-orig/src/join.c coreutils-8.21/src/join.c
|
||||
}
|
||||
putchar (eolchar);
|
||||
}
|
||||
@@ -1090,21 +1334,46 @@ main (int argc, char **argv)
|
||||
@@ -1097,21 +1341,46 @@ main (int argc, char **argv)
|
||||
|
||||
case 't':
|
||||
{
|
||||
@ -1654,9 +1654,9 @@ diff -urNp coreutils-8.21-orig/src/join.c coreutils-8.21/src/join.c
|
||||
break;
|
||||
|
||||
case 'z':
|
||||
diff -urNp coreutils-8.21-orig/src/pr.c coreutils-8.21/src/pr.c
|
||||
--- coreutils-8.21-orig/src/pr.c 2013-01-31 01:46:24.000000000 +0100
|
||||
+++ coreutils-8.21/src/pr.c 2013-02-15 14:25:07.819467936 +0100
|
||||
diff -urNp coreutils-8.22-orig/src/pr.c coreutils-8.22/src/pr.c
|
||||
--- coreutils-8.22-orig/src/pr.c 2013-12-04 15:48:30.000000000 +0100
|
||||
+++ coreutils-8.22/src/pr.c 2013-12-16 17:40:25.944884263 +0100
|
||||
@@ -312,6 +312,32 @@
|
||||
|
||||
#include <getopt.h>
|
||||
@ -2410,9 +2410,9 @@ diff -urNp coreutils-8.21-orig/src/pr.c coreutils-8.21/src/pr.c
|
||||
/* 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 -urNp coreutils-8.21-orig/src/sort.c coreutils-8.21/src/sort.c
|
||||
--- coreutils-8.21-orig/src/sort.c 2013-08-14 18:14:06.172216606 +0200
|
||||
+++ coreutils-8.21/src/sort.c 2013-08-14 18:13:30.295247905 +0200
|
||||
diff -urNp coreutils-8.22-orig/src/sort.c coreutils-8.22/src/sort.c
|
||||
--- coreutils-8.22-orig/src/sort.c 2013-12-04 15:48:30.000000000 +0100
|
||||
+++ coreutils-8.22/src/sort.c 2013-12-16 17:40:25.949882582 +0100
|
||||
@@ -29,6 +29,14 @@
|
||||
#include <sys/wait.h>
|
||||
#include <signal.h>
|
||||
@ -2432,8 +2432,8 @@ diff -urNp coreutils-8.21-orig/src/sort.c coreutils-8.21/src/sort.c
|
||||
|
||||
/* Nonzero if the corresponding locales are hard. */
|
||||
static bool hard_LC_COLLATE;
|
||||
+#if HAVE_LANGINFO_CODESET
|
||||
-#if HAVE_NL_LANGINFO
|
||||
+#if HAVE_LANGINFO_CODESET
|
||||
static bool hard_LC_TIME;
|
||||
#endif
|
||||
|
||||
@ -2468,20 +2468,20 @@ diff -urNp coreutils-8.21-orig/src/sort.c coreutils-8.21/src/sort.c
|
||||
they were read if all keys compare equal. */
|
||||
static bool stable;
|
||||
|
||||
+/* Tab character separating fields. If tab_length is 0, then fields are
|
||||
-/* If TAB has this value, blanks separate fields. */
|
||||
-enum { TAB_DEFAULT = CHAR_MAX + 1 };
|
||||
-
|
||||
-/* Tab character separating fields. If TAB_DEFAULT, then fields are
|
||||
+/* Tab character separating fields. If tab_length is 0, then fields are
|
||||
separated by the empty string between a non-blank character and a blank
|
||||
character. */
|
||||
-static int tab = TAB_DEFAULT;
|
||||
+static char tab[MB_LEN_MAX + 1];
|
||||
+static size_t tab_length = 0;
|
||||
-static int tab = TAB_DEFAULT;
|
||||
|
||||
/* Flag to remove consecutive duplicate lines from the output.
|
||||
Only the last of a sequence of equal lines will be output. */
|
||||
@@ -783,6 +811,46 @@ reap_all (void)
|
||||
@@ -811,6 +839,46 @@ reap_all (void)
|
||||
reap (-1);
|
||||
}
|
||||
|
||||
@ -2528,34 +2528,34 @@ diff -urNp coreutils-8.21-orig/src/sort.c coreutils-8.21/src/sort.c
|
||||
/* Clean up any remaining temporary files. */
|
||||
|
||||
static void
|
||||
@@ -1223,7 +1291,7 @@ zaptemp (char const *name)
|
||||
@@ -1255,7 +1323,7 @@ zaptemp (char const *name)
|
||||
free (node);
|
||||
}
|
||||
|
||||
+#if HAVE_LANGINFO_CODESET
|
||||
-#if HAVE_NL_LANGINFO
|
||||
+#if HAVE_LANGINFO_CODESET
|
||||
|
||||
static int
|
||||
struct_month_cmp (void const *m1, void const *m2)
|
||||
@@ -1238,7 +1306,7 @@ struct_month_cmp (void const *m1, void c
|
||||
@@ -1270,7 +1338,7 @@ struct_month_cmp (void const *m1, void c
|
||||
/* Initialize the character class tables. */
|
||||
|
||||
static void
|
||||
+inittables_uni (void)
|
||||
-inittables (void)
|
||||
+inittables_uni (void)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
@@ -1250,7 +1318,7 @@ inittables_uni (void)
|
||||
@@ -1282,7 +1350,7 @@ inittables (void)
|
||||
fold_toupper[i] = toupper (i);
|
||||
}
|
||||
|
||||
+#if HAVE_LANGINFO_CODESET
|
||||
-#if HAVE_NL_LANGINFO
|
||||
+#if HAVE_LANGINFO_CODESET
|
||||
/* If we're not in the "C" locale, read different names for months. */
|
||||
if (hard_LC_TIME)
|
||||
{
|
||||
@@ -1332,6 +1400,84 @@ specify_nmerge (int oi, char c, char con
|
||||
@@ -1364,6 +1432,84 @@ specify_nmerge (int oi, char c, char con
|
||||
xstrtol_fatal (e, oi, c, long_options, s);
|
||||
}
|
||||
|
||||
@ -2640,29 +2640,29 @@ diff -urNp coreutils-8.21-orig/src/sort.c coreutils-8.21/src/sort.c
|
||||
/* Specify the amount of main memory to use when sorting. */
|
||||
static void
|
||||
specify_sort_size (int oi, char c, char const *s)
|
||||
@@ -1564,7 +1710,7 @@ buffer_linelim (struct buffer const *buf
|
||||
@@ -1597,7 +1743,7 @@ buffer_linelim (struct buffer const *buf
|
||||
by KEY in LINE. */
|
||||
|
||||
static char *
|
||||
+begfield_uni (const struct line *line, const struct keyfield *key)
|
||||
-begfield (struct line const *line, struct keyfield const *key)
|
||||
+begfield_uni (const struct line *line, const struct keyfield *key)
|
||||
{
|
||||
char *ptr = line->text, *lim = ptr + line->length - 1;
|
||||
size_t sword = key->sword;
|
||||
@@ -1573,10 +1719,10 @@ begfield_uni (const struct line *line, c
|
||||
@@ -1606,10 +1752,10 @@ begfield (struct line const *line, struc
|
||||
/* The leading field separator itself is included in a field when -t
|
||||
is absent. */
|
||||
|
||||
+ if (tab_length)
|
||||
- if (tab != TAB_DEFAULT)
|
||||
+ if (tab_length)
|
||||
while (ptr < lim && sword--)
|
||||
{
|
||||
+ while (ptr < lim && *ptr != tab[0])
|
||||
- while (ptr < lim && *ptr != tab)
|
||||
+ while (ptr < lim && *ptr != tab[0])
|
||||
++ptr;
|
||||
if (ptr < lim)
|
||||
++ptr;
|
||||
@@ -1602,11 +1748,70 @@ begfield_uni (const struct line *line, c
|
||||
@@ -1635,11 +1781,70 @@ begfield (struct line const *line, struc
|
||||
return ptr;
|
||||
}
|
||||
|
||||
@ -2729,38 +2729,38 @@ diff -urNp coreutils-8.21-orig/src/sort.c coreutils-8.21/src/sort.c
|
||||
in LINE specified by KEY. */
|
||||
|
||||
static char *
|
||||
+limfield_uni (const struct line *line, const struct keyfield *key)
|
||||
-limfield (struct line const *line, struct keyfield const *key)
|
||||
+limfield_uni (const struct line *line, const struct keyfield *key)
|
||||
{
|
||||
char *ptr = line->text, *lim = ptr + line->length - 1;
|
||||
size_t eword = key->eword, echar = key->echar;
|
||||
@@ -1621,10 +1826,10 @@ limfield_uni (const struct line *line, c
|
||||
@@ -1654,10 +1859,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. */
|
||||
+ if (tab_length)
|
||||
- if (tab != TAB_DEFAULT)
|
||||
+ if (tab_length)
|
||||
while (ptr < lim && eword--)
|
||||
{
|
||||
+ while (ptr < lim && *ptr != tab[0])
|
||||
- while (ptr < lim && *ptr != tab)
|
||||
+ while (ptr < lim && *ptr != tab[0])
|
||||
++ptr;
|
||||
if (ptr < lim && (eword || echar))
|
||||
++ptr;
|
||||
@@ -1670,10 +1875,10 @@ limfield_uni (const struct line *line, c
|
||||
@@ -1703,10 +1908,10 @@ limfield (struct line const *line, struc
|
||||
*/
|
||||
|
||||
/* Make LIM point to the end of (one byte past) the current field. */
|
||||
+ if (tab_length)
|
||||
- if (tab != TAB_DEFAULT)
|
||||
+ if (tab_length)
|
||||
{
|
||||
char *newlim;
|
||||
+ newlim = memchr (ptr, tab[0], lim - ptr);
|
||||
- newlim = memchr (ptr, tab, lim - ptr);
|
||||
+ newlim = memchr (ptr, tab[0], lim - ptr);
|
||||
if (newlim)
|
||||
lim = newlim;
|
||||
}
|
||||
@@ -1704,6 +1909,130 @@ limfield_uni (const struct line *line, c
|
||||
@@ -1737,6 +1942,130 @@ limfield (struct line const *line, struc
|
||||
return ptr;
|
||||
}
|
||||
|
||||
@ -2891,10 +2891,12 @@ diff -urNp coreutils-8.21-orig/src/sort.c coreutils-8.21/src/sort.c
|
||||
/* 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
|
||||
@@ -1790,8 +2119,22 @@ fillbuf (struct buffer *buf, FILE *fp, c
|
||||
@@ -1823,8 +2152,22 @@ fillbuf (struct buffer *buf, FILE *fp, c
|
||||
else
|
||||
{
|
||||
if (key->skipsblanks)
|
||||
- while (blanks[to_uchar (*line_start)])
|
||||
- line_start++;
|
||||
+ {
|
||||
+#if HAVE_MBRTOWC
|
||||
+ if (MB_CUR_MAX > 1)
|
||||
@ -2911,21 +2913,19 @@ diff -urNp coreutils-8.21-orig/src/sort.c coreutils-8.21/src/sort.c
|
||||
+ while (blanks[to_uchar (*line_start)])
|
||||
+ line_start++;
|
||||
+ }
|
||||
- while (blanks[to_uchar (*line_start)])
|
||||
- line_start++;
|
||||
line->keybeg = line_start;
|
||||
}
|
||||
}
|
||||
@@ -1912,7 +2255,7 @@ human_numcompare (char const *a, char co
|
||||
@@ -1945,7 +2288,7 @@ human_numcompare (char const *a, char co
|
||||
hideously fast. */
|
||||
|
||||
static int
|
||||
+numcompare_uni (const char *a, const char *b)
|
||||
-numcompare (char const *a, char const *b)
|
||||
+numcompare_uni (const char *a, const char *b)
|
||||
{
|
||||
while (blanks[to_uchar (*a)])
|
||||
a++;
|
||||
@@ -1922,6 +2265,25 @@ numcompare_uni (const char *a, const cha
|
||||
@@ -1955,6 +2298,25 @@ numcompare (char const *a, char const *b
|
||||
return strnumcmp (a, b, decimal_point, thousands_sep);
|
||||
}
|
||||
|
||||
@ -2951,43 +2951,43 @@ diff -urNp coreutils-8.21-orig/src/sort.c coreutils-8.21/src/sort.c
|
||||
/* 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 once
|
||||
@@ -1972,7 +2334,7 @@ general_numcompare (char const *sa, char
|
||||
@@ -2005,7 +2367,7 @@ general_numcompare (char const *sa, char
|
||||
Return 0 if the name in S is not recognized. */
|
||||
|
||||
static int
|
||||
+getmonth_uni (char const *month, size_t len, char **ea)
|
||||
-getmonth (char const *month, char **ea)
|
||||
+getmonth_uni (char const *month, size_t len, char **ea)
|
||||
{
|
||||
size_t lo = 0;
|
||||
size_t hi = MONTHS_PER_YEAR;
|
||||
@@ -2247,15 +2609,14 @@ debug_key (struct line const *line, stru
|
||||
@@ -2280,15 +2642,14 @@ debug_key (struct line const *line, stru
|
||||
char saved = *lim;
|
||||
*lim = '\0';
|
||||
|
||||
+ skipblanks (&beg, lim);
|
||||
- while (blanks[to_uchar (*beg)])
|
||||
- beg++;
|
||||
+ skipblanks (&beg, lim);
|
||||
|
||||
char *tighter_lim = beg;
|
||||
|
||||
if (lim < beg)
|
||||
tighter_lim = lim;
|
||||
else if (key->month)
|
||||
+ getmonth (beg, lim-beg, &tighter_lim);
|
||||
- getmonth (beg, &tighter_lim);
|
||||
+ getmonth (beg, lim-beg, &tighter_lim);
|
||||
else if (key->general_numeric)
|
||||
ignore_value (strtold (beg, &tighter_lim));
|
||||
else if (key->numeric || key->human_numeric)
|
||||
@@ -2399,7 +2760,7 @@ key_warnings (struct keyfield const *gke
|
||||
@@ -2432,7 +2793,7 @@ key_warnings (struct keyfield const *gke
|
||||
bool maybe_space_aligned = !hard_LC_COLLATE && default_key_compare (key)
|
||||
&& !(key->schar || key->echar);
|
||||
bool line_offset = key->eword == 0 && key->echar != 0; /* -k1.x,1.y */
|
||||
+ if (!gkey_only && !tab_length && !line_offset
|
||||
- if (!gkey_only && tab == TAB_DEFAULT && !line_offset
|
||||
+ if (!gkey_only && !tab_length && !line_offset
|
||||
&& ((!key->skipsblanks && !(implicit_skip || maybe_space_aligned))
|
||||
|| (!key->skipsblanks && key->schar)
|
||||
|| (!key->skipeblanks && key->echar)))
|
||||
@@ -2457,11 +2818,87 @@ key_warnings (struct keyfield const *gke
|
||||
@@ -2490,11 +2851,87 @@ key_warnings (struct keyfield const *gke
|
||||
error (0, 0, _("option '-r' only applies to last-resort comparison"));
|
||||
}
|
||||
|
||||
@ -3071,21 +3071,21 @@ diff -urNp coreutils-8.21-orig/src/sort.c coreutils-8.21/src/sort.c
|
||||
are no more keys or a difference is found. */
|
||||
|
||||
static int
|
||||
+keycompare_uni (const struct line *a, const struct line *b)
|
||||
-keycompare (struct line const *a, struct line const *b)
|
||||
+keycompare_uni (const struct line *a, const struct line *b)
|
||||
{
|
||||
struct keyfield *key = keylist;
|
||||
|
||||
@@ -2546,7 +2983,7 @@ keycompare_uni (const struct line *a, co
|
||||
@@ -2579,7 +3016,7 @@ keycompare (struct line const *a, struct
|
||||
else if (key->human_numeric)
|
||||
diff = human_numcompare (ta, tb);
|
||||
else if (key->month)
|
||||
+ diff = getmonth (ta, tlena, NULL) - getmonth (tb, tlenb, NULL);
|
||||
- diff = getmonth (ta, NULL) - getmonth (tb, NULL);
|
||||
+ diff = getmonth (ta, tlena, NULL) - getmonth (tb, tlenb, NULL);
|
||||
else if (key->random)
|
||||
diff = compare_random (ta, tlena, tb, tlenb);
|
||||
else if (key->version)
|
||||
@@ -2662,6 +3099,191 @@ keycompare_uni (const struct line *a, co
|
||||
@@ -2695,6 +3132,191 @@ keycompare (struct line const *a, struct
|
||||
return key->reverse ? -diff : diff;
|
||||
}
|
||||
|
||||
@ -3277,7 +3277,7 @@ diff -urNp coreutils-8.21-orig/src/sort.c coreutils-8.21/src/sort.c
|
||||
/* Compare two lines A and B, returning negative, zero, or positive
|
||||
depending on whether A compares less than, equal to, or greater than B. */
|
||||
|
||||
@@ -2689,14 +3311,6 @@ compare (struct line const *a, struct li
|
||||
@@ -2722,14 +3344,6 @@ compare (struct line const *a, struct li
|
||||
diff = - NONZERO (blen);
|
||||
else if (blen == 0)
|
||||
diff = 1;
|
||||
@ -3292,16 +3292,16 @@ diff -urNp coreutils-8.21-orig/src/sort.c coreutils-8.21/src/sort.c
|
||||
else if (! (diff = memcmp (a->text, b->text, MIN (alen, blen))))
|
||||
diff = alen < blen ? -1 : alen != blen;
|
||||
|
||||
@@ -4157,7 +4771,7 @@ main (int argc, char **argv)
|
||||
@@ -4190,7 +4804,7 @@ main (int argc, char **argv)
|
||||
initialize_exit_failure (SORT_FAILURE);
|
||||
|
||||
hard_LC_COLLATE = hard_locale (LC_COLLATE);
|
||||
+#if HAVE_LANGINFO_CODESET
|
||||
-#if HAVE_NL_LANGINFO
|
||||
+#if HAVE_LANGINFO_CODESET
|
||||
hard_LC_TIME = hard_locale (LC_TIME);
|
||||
#endif
|
||||
|
||||
@@ -4178,6 +4792,29 @@ main (int argc, char **argv)
|
||||
@@ -4211,6 +4825,29 @@ main (int argc, char **argv)
|
||||
thousands_sep = -1;
|
||||
}
|
||||
|
||||
@ -3331,17 +3331,18 @@ diff -urNp coreutils-8.21-orig/src/sort.c coreutils-8.21/src/sort.c
|
||||
have_read_stdin = false;
|
||||
inittables ();
|
||||
|
||||
@@ -4452,13 +5089,34 @@ main (int argc, char **argv)
|
||||
@@ -4485,13 +5122,34 @@ main (int argc, char **argv)
|
||||
|
||||
case 't':
|
||||
{
|
||||
- char newtab = optarg[0];
|
||||
- if (! newtab)
|
||||
+ char newtab[MB_LEN_MAX + 1];
|
||||
+ size_t newtab_length = 1;
|
||||
+ strncpy (newtab, optarg, MB_LEN_MAX);
|
||||
+ if (! newtab[0])
|
||||
- char newtab = optarg[0];
|
||||
- if (! newtab)
|
||||
error (SORT_FAILURE, 0, _("empty tab"));
|
||||
- if (optarg[1])
|
||||
+#if HAVE_MBRTOWC
|
||||
+ if (MB_CUR_MAX > 1)
|
||||
+ {
|
||||
@ -3362,32 +3363,31 @@ diff -urNp coreutils-8.21-orig/src/sort.c coreutils-8.21/src/sort.c
|
||||
+ }
|
||||
+#endif
|
||||
+ if (newtab_length == 1 && optarg[1])
|
||||
- if (optarg[1])
|
||||
{
|
||||
if (STREQ (optarg, "\\0"))
|
||||
+ newtab[0] = '\0';
|
||||
- newtab = '\0';
|
||||
+ newtab[0] = '\0';
|
||||
else
|
||||
{
|
||||
/* Provoke with 'sort -txx'. Complain about
|
||||
@@ -4469,9 +5127,12 @@ main (int argc, char **argv)
|
||||
@@ -4502,9 +5160,12 @@ main (int argc, char **argv)
|
||||
quote (optarg));
|
||||
}
|
||||
}
|
||||
- if (tab != TAB_DEFAULT && tab != newtab)
|
||||
+ if (tab_length
|
||||
+ && (tab_length != newtab_length
|
||||
+ || memcmp (tab, newtab, tab_length) != 0))
|
||||
- if (tab != TAB_DEFAULT && tab != newtab)
|
||||
error (SORT_FAILURE, 0, _("incompatible tabs"));
|
||||
- tab = newtab;
|
||||
+ memcpy (tab, newtab, newtab_length);
|
||||
+ tab_length = newtab_length;
|
||||
- tab = newtab;
|
||||
}
|
||||
break;
|
||||
|
||||
diff -urNp coreutils-8.21-orig/src/unexpand.c coreutils-8.21/src/unexpand.c
|
||||
--- coreutils-8.21-orig/src/unexpand.c 2013-01-31 01:46:24.000000000 +0100
|
||||
+++ coreutils-8.21/src/unexpand.c 2013-02-15 14:25:07.834467715 +0100
|
||||
diff -urNp coreutils-8.22-orig/src/unexpand.c coreutils-8.22/src/unexpand.c
|
||||
--- coreutils-8.22-orig/src/unexpand.c 2013-12-04 15:48:30.000000000 +0100
|
||||
+++ coreutils-8.22/src/unexpand.c 2013-12-16 17:40:25.951881910 +0100
|
||||
@@ -38,12 +38,29 @@
|
||||
#include <stdio.h>
|
||||
#include <getopt.h>
|
||||
@ -3629,7 +3629,7 @@ diff -urNp coreutils-8.21-orig/src/unexpand.c coreutils-8.21/src/unexpand.c
|
||||
void
|
||||
usage (int status)
|
||||
{
|
||||
@@ -523,7 +742,12 @@ main (int argc, char **argv)
|
||||
@@ -523,7 +744,12 @@ main (int argc, char **argv)
|
||||
|
||||
file_list = (optind < argc ? &argv[optind] : stdin_argv);
|
||||
|
||||
@ -3643,9 +3643,9 @@ diff -urNp coreutils-8.21-orig/src/unexpand.c coreutils-8.21/src/unexpand.c
|
||||
|
||||
if (have_read_stdin && fclose (stdin) != 0)
|
||||
error (EXIT_FAILURE, errno, "-");
|
||||
diff -urNp coreutils-8.21-orig/src/uniq.c coreutils-8.21/src/uniq.c
|
||||
--- coreutils-8.21-orig/src/uniq.c 2013-01-31 01:46:24.000000000 +0100
|
||||
+++ coreutils-8.21/src/uniq.c 2013-02-15 14:25:07.839467991 +0100
|
||||
diff -urNp coreutils-8.22-orig/src/uniq.c coreutils-8.22/src/uniq.c
|
||||
--- coreutils-8.22-orig/src/uniq.c 2013-12-04 15:48:30.000000000 +0100
|
||||
+++ coreutils-8.22/src/uniq.c 2013-12-16 17:41:06.711697074 +0100
|
||||
@@ -21,6 +21,16 @@
|
||||
#include <getopt.h>
|
||||
#include <sys/types.h>
|
||||
@ -3684,7 +3684,7 @@ diff -urNp coreutils-8.21-orig/src/uniq.c coreutils-8.21/src/uniq.c
|
||||
|
||||
/* The official name of this program (e.g., no 'g' prefix). */
|
||||
#define PROGRAM_NAME "uniq"
|
||||
@@ -108,6 +130,10 @@
|
||||
@@ -143,6 +165,10 @@ enum
|
||||
GROUP_OPTION = CHAR_MAX + 1
|
||||
};
|
||||
|
||||
@ -3695,7 +3695,7 @@ diff -urNp coreutils-8.21-orig/src/uniq.c coreutils-8.21/src/uniq.c
|
||||
static struct option const longopts[] =
|
||||
{
|
||||
{"count", no_argument, NULL, 'c'},
|
||||
@@ -205,7 +231,7 @@ size_opt (char const *opt, char const *m
|
||||
@@ -249,7 +275,7 @@ size_opt (char const *opt, char const *m
|
||||
return a pointer to the beginning of the line's field to be compared. */
|
||||
|
||||
static char * _GL_ATTRIBUTE_PURE
|
||||
@ -3704,7 +3704,7 @@ diff -urNp coreutils-8.21-orig/src/uniq.c coreutils-8.21/src/uniq.c
|
||||
{
|
||||
size_t count;
|
||||
char const *lp = line->buffer;
|
||||
@@ -225,6 +251,83 @@ find_field (struct linebuffer const *lin
|
||||
@@ -269,6 +295,83 @@ find_field (struct linebuffer const *lin
|
||||
return line->buffer + i;
|
||||
}
|
||||
|
||||
@ -3788,7 +3788,7 @@ diff -urNp coreutils-8.21-orig/src/uniq.c coreutils-8.21/src/uniq.c
|
||||
/* 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.
|
||||
@@ -233,6 +336,8 @@ find_field (struct linebuffer const *lin
|
||||
@@ -277,6 +380,8 @@ find_field (struct linebuffer const *lin
|
||||
static bool
|
||||
different (char *old, char *new, size_t oldlen, size_t newlen)
|
||||
{
|
||||
@ -3797,7 +3797,7 @@ diff -urNp coreutils-8.21-orig/src/uniq.c coreutils-8.21/src/uniq.c
|
||||
if (check_chars < oldlen)
|
||||
oldlen = check_chars;
|
||||
if (check_chars < newlen)
|
||||
@@ -240,14 +345,100 @@ different (char *old, char *new, size_t
|
||||
@@ -284,14 +389,100 @@ different (char *old, char *new, size_t
|
||||
|
||||
if (ignore_case)
|
||||
{
|
||||
@ -3903,7 +3903,7 @@ diff -urNp coreutils-8.21-orig/src/uniq.c coreutils-8.21/src/uniq.c
|
||||
|
||||
/* Output the line in linebuffer LINE to standard output
|
||||
provided that the switches say it should be output.
|
||||
@@ -303,18 +494,45 @@ check_file (const char *infile, const ch
|
||||
@@ -356,18 +547,55 @@ check_file (const char *infile, const ch
|
||||
char *prevfield IF_LINT ( = NULL);
|
||||
size_t prevlen IF_LINT ( = 0);
|
||||
bool first_group_printed = false;
|
||||
@ -3928,12 +3928,20 @@ diff -urNp coreutils-8.21-orig/src/uniq.c coreutils-8.21/src/uniq.c
|
||||
thisfield = find_field (thisline);
|
||||
thislen = thisline->length - 1 - (thisfield - thisline->buffer);
|
||||
+#if HAVE_MBRTOWC
|
||||
+ if (MB_CUR_MAX > 1)
|
||||
+ if (MB_CUR_MAX > 1)
|
||||
+ {
|
||||
+ thisstate = thisline->state;
|
||||
+
|
||||
+ if (prevline->length == 0 || different_multi
|
||||
+ (thisfield, prevfield, thislen, prevlen, thisstate, prevstate))
|
||||
+ new_group = (prevline->length == 0 || different_multi
|
||||
+ (thisfield, prevfield, thislen, prevlen, thisstate, prevstate));
|
||||
+
|
||||
+ if (new_group && grouping != GM_NONE
|
||||
+ && (grouping == GM_PREPEND || grouping == GM_BOTH
|
||||
+ || (first_group_printed && (grouping == GM_APPEND
|
||||
+ || grouping == GM_SEPARATE))))
|
||||
+ putchar (delimiter);
|
||||
+
|
||||
+ if (new_group || grouping != GM_NONE)
|
||||
+ {
|
||||
+ fwrite (thisline->buffer, sizeof (char),
|
||||
+ thisline->length, stdout);
|
||||
@ -3942,14 +3950,35 @@ diff -urNp coreutils-8.21-orig/src/uniq.c coreutils-8.21/src/uniq.c
|
||||
+ prevfield = thisfield;
|
||||
+ prevlen = thislen;
|
||||
+ prevstate = thisstate;
|
||||
+ first_group_printed = true;
|
||||
+ }
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+#endif
|
||||
|
||||
new_group = (prevline->length == 0
|
||||
|| different (thisfield, prevfield, thislen, prevlen));
|
||||
@@ -330,17 +549,26 @@ check_file (const char *infile, const ch
|
||||
@@ -376,7 +604,7 @@ check_file (const char *infile, const ch
|
||||
&& (grouping == GM_PREPEND || grouping == GM_BOTH
|
||||
|| (first_group_printed && (grouping == GM_APPEND
|
||||
|| grouping == GM_SEPARATE))))
|
||||
- putchar (delimiter);
|
||||
+ putchar (delimiter);
|
||||
|
||||
if (new_group || grouping != GM_NONE)
|
||||
{
|
||||
@@ -388,6 +616,9 @@ check_file (const char *infile, const ch
|
||||
prevlen = thislen;
|
||||
first_group_printed = true;
|
||||
}
|
||||
+#if HAVE_MBRTOWC
|
||||
+ }
|
||||
+#endif
|
||||
}
|
||||
if ((grouping == GM_BOTH || grouping == GM_APPEND) && first_group_printed)
|
||||
putchar (delimiter);
|
||||
@@ -398,17 +629,26 @@ check_file (const char *infile, const ch
|
||||
size_t prevlen;
|
||||
uintmax_t match_count = 0;
|
||||
bool first_delimiter = true;
|
||||
@ -3976,7 +4005,7 @@ diff -urNp coreutils-8.21-orig/src/uniq.c coreutils-8.21/src/uniq.c
|
||||
if (readlinebuffer_delim (thisline, stdin, delimiter) == 0)
|
||||
{
|
||||
if (ferror (stdin))
|
||||
@@ -349,6 +577,14 @@ check_file (const char *infile, const ch
|
||||
@@ -417,6 +657,14 @@ check_file (const char *infile, const ch
|
||||
}
|
||||
thisfield = find_field (thisline);
|
||||
thislen = thisline->length - 1 - (thisfield - thisline->buffer);
|
||||
@ -3991,7 +4020,7 @@ diff -urNp coreutils-8.21-orig/src/uniq.c coreutils-8.21/src/uniq.c
|
||||
match = !different (thisfield, prevfield, thislen, prevlen);
|
||||
match_count += match;
|
||||
|
||||
@@ -381,6 +617,9 @@ check_file (const char *infile, const ch
|
||||
@@ -449,6 +697,9 @@ check_file (const char *infile, const ch
|
||||
SWAP_LINES (prevline, thisline);
|
||||
prevfield = thisfield;
|
||||
prevlen = thislen;
|
||||
@ -4001,7 +4030,7 @@ diff -urNp coreutils-8.21-orig/src/uniq.c coreutils-8.21/src/uniq.c
|
||||
if (!match)
|
||||
match_count = 0;
|
||||
}
|
||||
@@ -426,6 +665,19 @@ main (int argc, char **argv)
|
||||
@@ -495,6 +746,19 @@ main (int argc, char **argv)
|
||||
|
||||
atexit (close_stdout);
|
||||
|
||||
@ -4021,10 +4050,10 @@ diff -urNp coreutils-8.21-orig/src/uniq.c coreutils-8.21/src/uniq.c
|
||||
skip_chars = 0;
|
||||
skip_fields = 0;
|
||||
check_chars = SIZE_MAX;
|
||||
diff -urNp coreutils-8.21-orig/tests/local.mk coreutils-8.21/tests/local.mk
|
||||
--- coreutils-8.21-orig/tests/local.mk 2013-02-15 14:24:32.645654553 +0100
|
||||
+++ coreutils-8.21/tests/local.mk 2013-02-15 14:25:07.873467648 +0100
|
||||
@@ -325,6 +325,7 @@ all_tests = \
|
||||
diff -urNp coreutils-8.22-orig/tests/local.mk coreutils-8.22/tests/local.mk
|
||||
--- coreutils-8.22-orig/tests/local.mk 2013-12-16 17:39:49.187181544 +0100
|
||||
+++ coreutils-8.22/tests/local.mk 2013-12-16 17:40:25.955880566 +0100
|
||||
@@ -324,6 +324,7 @@ all_tests = \
|
||||
tests/misc/sort-discrim.sh \
|
||||
tests/misc/sort-files0-from.pl \
|
||||
tests/misc/sort-float.sh \
|
||||
@ -4032,9 +4061,9 @@ diff -urNp coreutils-8.21-orig/tests/local.mk coreutils-8.21/tests/local.mk
|
||||
tests/misc/sort-merge.pl \
|
||||
tests/misc/sort-merge-fdlimit.sh \
|
||||
tests/misc/sort-month.sh \
|
||||
diff -urNp coreutils-8.21-orig/tests/misc/cut.pl coreutils-8.21/tests/misc/cut.pl
|
||||
--- coreutils-8.21-orig/tests/misc/cut.pl 2013-02-05 00:40:31.000000000 +0100
|
||||
+++ coreutils-8.21/tests/misc/cut.pl 2013-11-27 19:47:58.430539269 +0100
|
||||
diff -urNp coreutils-8.22-orig/tests/misc/cut.pl coreutils-8.22/tests/misc/cut.pl
|
||||
--- coreutils-8.22-orig/tests/misc/cut.pl 2013-12-04 15:48:30.000000000 +0100
|
||||
+++ coreutils-8.22/tests/misc/cut.pl 2013-12-16 17:40:25.956880230 +0100
|
||||
@@ -23,9 +23,11 @@ use strict;
|
||||
# Turn off localization of executable's output.
|
||||
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
|
||||
@ -4049,7 +4078,7 @@ diff -urNp coreutils-8.21-orig/tests/misc/cut.pl coreutils-8.21/tests/misc/cut.p
|
||||
|
||||
my $prog = 'cut';
|
||||
my $try = "Try '$prog --help' for more information.\n";
|
||||
@@ -224,6 +226,7 @@
|
||||
@@ -225,6 +227,7 @@ if ($mb_locale ne 'C')
|
||||
my @new_t = @$t;
|
||||
my $test_name = shift @new_t;
|
||||
|
||||
@ -4057,9 +4086,9 @@ diff -urNp coreutils-8.21-orig/tests/misc/cut.pl coreutils-8.21/tests/misc/cut.p
|
||||
push @new, ["$test_name-mb", @new_t, {ENV => "LC_ALL=$mb_locale"}];
|
||||
}
|
||||
push @Tests, @new;
|
||||
diff -urNp coreutils-8.21-orig/tests/misc/expand.pl coreutils-8.21/tests/misc/expand.pl
|
||||
--- coreutils-8.21-orig/tests/misc/expand.pl 2013-01-31 01:46:24.000000000 +0100
|
||||
+++ coreutils-8.21/tests/misc/expand.pl 2013-11-27 19:47:58.431538769 +0100
|
||||
diff -urNp coreutils-8.22-orig/tests/misc/expand.pl coreutils-8.22/tests/misc/expand.pl
|
||||
--- coreutils-8.22-orig/tests/misc/expand.pl 2013-12-04 15:48:30.000000000 +0100
|
||||
+++ coreutils-8.22/tests/misc/expand.pl 2013-12-16 17:40:25.957879894 +0100
|
||||
@@ -23,6 +23,15 @@ use strict;
|
||||
# Turn off localization of executable's output.
|
||||
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
|
||||
@ -4114,9 +4143,9 @@ diff -urNp coreutils-8.21-orig/tests/misc/expand.pl coreutils-8.21/tests/misc/ex
|
||||
my $save_temps = $ENV{DEBUG};
|
||||
my $verbose = $ENV{VERBOSE};
|
||||
|
||||
diff -urNp coreutils-8.21-orig/tests/misc/fold.pl coreutils-8.21/tests/misc/fold.pl
|
||||
--- coreutils-8.21-orig/tests/misc/fold.pl 2013-01-31 01:46:24.000000000 +0100
|
||||
+++ coreutils-8.21/tests/misc/fold.pl 2013-11-27 19:47:58.431538769 +0100
|
||||
diff -urNp coreutils-8.22-orig/tests/misc/fold.pl coreutils-8.22/tests/misc/fold.pl
|
||||
--- coreutils-8.22-orig/tests/misc/fold.pl 2013-12-04 15:48:30.000000000 +0100
|
||||
+++ coreutils-8.22/tests/misc/fold.pl 2013-12-16 17:40:25.958879558 +0100
|
||||
@@ -20,9 +20,18 @@ use strict;
|
||||
|
||||
(my $program_name = $0) =~ s|.*/||;
|
||||
@ -4186,9 +4215,9 @@ diff -urNp coreutils-8.21-orig/tests/misc/fold.pl coreutils-8.21/tests/misc/fold
|
||||
-my $prog = 'fold';
|
||||
my $fail = run_tests ($program_name, $prog, \@Tests, $save_temps, $verbose);
|
||||
exit $fail;
|
||||
diff -urNp coreutils-8.21-orig/tests/misc/join.pl coreutils-8.21/tests/misc/join.pl
|
||||
--- coreutils-8.21-orig/tests/misc/join.pl 2013-01-31 01:46:24.000000000 +0100
|
||||
+++ coreutils-8.21/tests/misc/join.pl 2013-11-27 19:47:58.432538269 +0100
|
||||
diff -urNp coreutils-8.22-orig/tests/misc/join.pl coreutils-8.22/tests/misc/join.pl
|
||||
--- coreutils-8.22-orig/tests/misc/join.pl 2013-12-04 15:48:30.000000000 +0100
|
||||
+++ coreutils-8.22/tests/misc/join.pl 2013-12-16 17:40:25.959879222 +0100
|
||||
@@ -25,6 +25,15 @@ my $limits = getlimits ();
|
||||
|
||||
my $prog = 'join';
|
||||
@ -4205,7 +4234,7 @@ diff -urNp coreutils-8.21-orig/tests/misc/join.pl coreutils-8.21/tests/misc/join
|
||||
my $delim = chr 0247;
|
||||
sub t_subst ($)
|
||||
{
|
||||
@@ -306,8 +315,49 @@ foreach my $t (@tv)
|
||||
@@ -326,8 +335,49 @@ foreach my $t (@tv)
|
||||
push @Tests, $new_ent;
|
||||
}
|
||||
|
||||
@ -4255,9 +4284,9 @@ diff -urNp coreutils-8.21-orig/tests/misc/join.pl coreutils-8.21/tests/misc/join
|
||||
my $save_temps = $ENV{DEBUG};
|
||||
my $verbose = $ENV{VERBOSE};
|
||||
|
||||
diff -urNp coreutils-8.21-orig/tests/misc/sort-mb-tests.sh coreutils-8.21/tests/misc/sort-mb-tests.sh
|
||||
--- coreutils-8.21-orig/tests/misc/sort-mb-tests.sh 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ coreutils-8.21/tests/misc/sort-mb-tests.sh 2013-02-18 17:44:03.852275681 +0100
|
||||
diff -urNp coreutils-8.22-orig/tests/misc/sort-mb-tests.sh coreutils-8.22/tests/misc/sort-mb-tests.sh
|
||||
--- coreutils-8.22-orig/tests/misc/sort-mb-tests.sh 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ coreutils-8.22/tests/misc/sort-mb-tests.sh 2013-12-16 17:40:25.959879222 +0100
|
||||
@@ -0,0 +1,45 @@
|
||||
+#!/bin/sh
|
||||
+# Verify sort's multi-byte support.
|
||||
@ -4304,9 +4333,9 @@ diff -urNp coreutils-8.21-orig/tests/misc/sort-mb-tests.sh coreutils-8.21/tests/
|
||||
+compare exp out || { fail=1; cat out; }
|
||||
+
|
||||
+Exit $fail
|
||||
diff -urNp coreutils-8.21-orig/tests/misc/sort-merge.pl coreutils-8.21/tests/misc/sort-merge.pl
|
||||
--- coreutils-8.21-orig/tests/misc/sort-merge.pl 2013-01-31 01:46:24.000000000 +0100
|
||||
+++ coreutils-8.21/tests/misc/sort-merge.pl 2013-11-27 19:47:58.435536769 +0100
|
||||
diff -urNp coreutils-8.22-orig/tests/misc/sort-merge.pl coreutils-8.22/tests/misc/sort-merge.pl
|
||||
--- coreutils-8.22-orig/tests/misc/sort-merge.pl 2013-12-04 15:48:30.000000000 +0100
|
||||
+++ coreutils-8.22/tests/misc/sort-merge.pl 2013-12-16 17:40:25.960878886 +0100
|
||||
@@ -26,6 +26,15 @@ my $prog = 'sort';
|
||||
# Turn off localization of executable's output.
|
||||
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
|
||||
@ -4363,9 +4392,9 @@ diff -urNp coreutils-8.21-orig/tests/misc/sort-merge.pl coreutils-8.21/tests/mis
|
||||
my $save_temps = $ENV{DEBUG};
|
||||
my $verbose = $ENV{VERBOSE};
|
||||
|
||||
diff -urNp coreutils-8.21-orig/tests/misc/sort.pl coreutils-8.21/tests/misc/sort.pl
|
||||
--- coreutils-8.21-orig/tests/misc/sort.pl 2013-01-31 01:46:24.000000000 +0100
|
||||
+++ coreutils-8.21/tests/misc/sort.pl 2013-11-27 19:47:58.436536269 +0100
|
||||
diff -urNp coreutils-8.22-orig/tests/misc/sort.pl coreutils-8.22/tests/misc/sort.pl
|
||||
--- coreutils-8.22-orig/tests/misc/sort.pl 2013-12-04 15:48:30.000000000 +0100
|
||||
+++ coreutils-8.22/tests/misc/sort.pl 2013-12-16 17:40:25.962878214 +0100
|
||||
@@ -24,10 +24,15 @@ my $prog = 'sort';
|
||||
# Turn off localization of executable's output.
|
||||
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
|
||||
@ -4383,11 +4412,10 @@ diff -urNp coreutils-8.21-orig/tests/misc/sort.pl coreutils-8.21/tests/misc/sort
|
||||
# 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 '-'.
|
||||
@@ -414,6 +419,37 @@
|
||||
and push (@$t, {ENV=>'_POSIX2_VERSION=199209'}), last;
|
||||
@@ -415,6 +420,37 @@ foreach my $t (@Tests)
|
||||
}
|
||||
}
|
||||
+
|
||||
|
||||
+if ($mb_locale ne 'C')
|
||||
+ {
|
||||
+ # Duplicate each test vector, appending "-mb" to the test name and
|
||||
@ -4418,9 +4446,10 @@ diff -urNp coreutils-8.21-orig/tests/misc/sort.pl coreutils-8.21/tests/misc/sort
|
||||
+ }
|
||||
+ push @Tests, @new;
|
||||
+ }
|
||||
|
||||
+
|
||||
@Tests = triple_test \@Tests;
|
||||
|
||||
# Remember that triple_test creates from each test with exactly one "IN"
|
||||
@@ -424,6 +460,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.
|
||||
@ -4429,9 +4458,9 @@ diff -urNp coreutils-8.21-orig/tests/misc/sort.pl coreutils-8.21/tests/misc/sort
|
||||
|
||||
my $save_temps = $ENV{DEBUG};
|
||||
my $verbose = $ENV{VERBOSE};
|
||||
diff -urNp coreutils-8.21-orig/tests/misc/unexpand.pl coreutils-8.21/tests/misc/unexpand.pl
|
||||
--- coreutils-8.21-orig/tests/misc/unexpand.pl 2013-01-31 01:46:24.000000000 +0100
|
||||
+++ coreutils-8.21/tests/misc/unexpand.pl 2013-11-27 19:47:58.436536269 +0100
|
||||
diff -urNp coreutils-8.22-orig/tests/misc/unexpand.pl coreutils-8.22/tests/misc/unexpand.pl
|
||||
--- coreutils-8.22-orig/tests/misc/unexpand.pl 2013-12-04 15:48:30.000000000 +0100
|
||||
+++ coreutils-8.22/tests/misc/unexpand.pl 2013-12-16 17:40:25.962878214 +0100
|
||||
@@ -27,6 +27,14 @@ my $limits = getlimits ();
|
||||
|
||||
my $prog = 'unexpand';
|
||||
@ -4485,9 +4514,9 @@ diff -urNp coreutils-8.21-orig/tests/misc/unexpand.pl coreutils-8.21/tests/misc/
|
||||
my $save_temps = $ENV{DEBUG};
|
||||
my $verbose = $ENV{VERBOSE};
|
||||
|
||||
diff -urNp coreutils-8.21-orig/tests/misc/uniq.pl coreutils-8.21/tests/misc/uniq.pl
|
||||
--- coreutils-8.21-orig/tests/misc/uniq.pl 2013-01-31 01:46:25.000000000 +0100
|
||||
+++ coreutils-8.21/tests/misc/uniq.pl 2013-11-27 19:47:58.437535769 +0100
|
||||
diff -urNp coreutils-8.22-orig/tests/misc/uniq.pl coreutils-8.22/tests/misc/uniq.pl
|
||||
--- coreutils-8.22-orig/tests/misc/uniq.pl 2013-12-04 15:48:30.000000000 +0100
|
||||
+++ coreutils-8.22/tests/misc/uniq.pl 2013-12-16 17:41:34.077961751 +0100
|
||||
@@ -23,9 +23,17 @@ my $limits = getlimits ();
|
||||
my $prog = 'uniq';
|
||||
my $try = "Try '$prog --help' for more information.\n";
|
||||
@ -4506,11 +4535,10 @@ diff -urNp coreutils-8.21-orig/tests/misc/uniq.pl coreutils-8.21/tests/misc/uniq
|
||||
# When possible, create a "-z"-testing variant of each test.
|
||||
sub add_z_variants($)
|
||||
{
|
||||
@@ -207,7 +215,45 @@
|
||||
$t->[0] =~ /^obs-plus/
|
||||
@@ -261,6 +269,45 @@ foreach my $t (@Tests)
|
||||
and push @$t, {ENV=>'_POSIX2_VERSION=199209'};
|
||||
}
|
||||
+
|
||||
|
||||
+if ($mb_locale ne 'C')
|
||||
+ {
|
||||
+ # Duplicate each test vector, appending "-mb" to the test name and
|
||||
@ -4534,12 +4562,13 @@ diff -urNp coreutils-8.21-orig/tests/misc/uniq.pl coreutils-8.21/tests/misc/uniq
|
||||
+ push @new_t, $sub;
|
||||
+ push @$t, $sub;
|
||||
+ }
|
||||
+ next if ($test_name =~ "schar" or $test_name =~ "^obs-plus" or $test_name =~ "119" or $test_name =~ "128" or $test_name =~ "129" or $test_name =~ "130" or $test_name =~ "131" or $test_name =~ "132" or $test_name =~ "133" or $test_name =~ "145");
|
||||
+ next if ($test_name =~ "schar" or $test_name =~ "^obs-plus"
|
||||
+ or $test_name =~ "119" or $test_name =~ "145");
|
||||
+ push @new, ["$test_name-mb", @new_t, {ENV => "LC_ALL=$mb_locale"}];
|
||||
+ }
|
||||
+ push @Tests, @new;
|
||||
+ }
|
||||
|
||||
+
|
||||
+# Remember that triple_test creates from each test with exactly one "IN"
|
||||
+# file two more tests (.p and .r suffix on name) corresponding to reading
|
||||
+# input from a file and from a pipe. The pipe-reading test would fail
|
||||
@ -4552,9 +4581,9 @@ diff -urNp coreutils-8.21-orig/tests/misc/uniq.pl coreutils-8.21/tests/misc/uniq
|
||||
@Tests = add_z_variants \@Tests;
|
||||
@Tests = triple_test \@Tests;
|
||||
|
||||
diff -urNp coreutils-8.21-orig/tests/pr/pr-tests.pl coreutils-8.21/tests/pr/pr-tests.pl
|
||||
--- coreutils-8.21-orig/tests/pr/pr-tests.pl 2013-01-31 01:46:25.000000000 +0100
|
||||
+++ coreutils-8.21/tests/pr/pr-tests.pl 2013-11-27 19:48:12.683409258 +0100
|
||||
diff -urNp coreutils-8.22-orig/tests/pr/pr-tests.pl coreutils-8.22/tests/pr/pr-tests.pl
|
||||
--- coreutils-8.22-orig/tests/pr/pr-tests.pl 2013-12-04 15:48:30.000000000 +0100
|
||||
+++ coreutils-8.22/tests/pr/pr-tests.pl 2013-12-16 17:40:25.965877206 +0100
|
||||
@@ -23,6 +23,15 @@ use strict;
|
||||
|
||||
my $prog = 'pr';
|
||||
|
Loading…
Reference in New Issue
Block a user