fix multibyte issues in cut and expand (M.Briza, #821260)

This commit is contained in:
Ondřej Vašík 2012-08-20 13:57:53 +02:00
parent 7ee630cc50
commit fa6f383f16
2 changed files with 137 additions and 79 deletions

View File

@ -1,6 +1,6 @@
diff -urNp coreutils-8.16-orig/lib/linebuffer.h coreutils-8.16/lib/linebuffer.h diff -urNp coreutils-8.19-orig/lib/linebuffer.h coreutils-8.19/lib/linebuffer.h
--- coreutils-8.16-orig/lib/linebuffer.h 2012-01-06 10:14:31.000000000 +0100 --- coreutils-8.19-orig/lib/linebuffer.h 2012-01-06 10:14:31.000000000 +0100
+++ coreutils-8.16/lib/linebuffer.h 2012-03-26 18:02:00.993889446 +0200 +++ coreutils-8.19/lib/linebuffer.h 2012-08-20 13:52:04.061593006 +0200
@@ -21,6 +21,11 @@ @@ -21,6 +21,11 @@
# include <stdio.h> # include <stdio.h>
@ -23,9 +23,9 @@ diff -urNp coreutils-8.16-orig/lib/linebuffer.h coreutils-8.16/lib/linebuffer.h
}; };
/* Initialize linebuffer LINEBUFFER for use. */ /* Initialize linebuffer LINEBUFFER for use. */
diff -urNp coreutils-8.16-orig/src/cut.c coreutils-8.16/src/cut.c diff -urNp coreutils-8.19-orig/src/cut.c coreutils-8.19/src/cut.c
--- coreutils-8.16-orig/src/cut.c 2012-03-24 21:26:51.000000000 +0100 --- coreutils-8.19-orig/src/cut.c 2012-07-21 16:54:31.000000000 +0200
+++ coreutils-8.16/src/cut.c 2012-03-26 17:46:48.000000000 +0200 +++ coreutils-8.19/src/cut.c 2012-08-20 13:52:52.299593173 +0200
@@ -28,6 +28,11 @@ @@ -28,6 +28,11 @@
#include <assert.h> #include <assert.h>
#include <getopt.h> #include <getopt.h>
@ -376,7 +376,7 @@ diff -urNp coreutils-8.16-orig/src/cut.c coreutils-8.16/src/cut.c
+ break; + break;
+ } + }
+ +
+ if (wc == WEOF) + if (len <= 0 && wc == WEOF)
+ break; + break;
+ +
+ /* If the first field extends to the end of line (it is not + /* If the first field extends to the end of line (it is not
@ -633,9 +633,9 @@ diff -urNp coreutils-8.16-orig/src/cut.c coreutils-8.16/src/cut.c
} }
if (optind == argc) if (optind == argc)
diff -urNp coreutils-8.16-orig/src/expand.c coreutils-8.16/src/expand.c diff -urNp coreutils-8.19-orig/src/expand.c coreutils-8.19/src/expand.c
--- coreutils-8.16-orig/src/expand.c 2012-03-24 21:26:51.000000000 +0100 --- coreutils-8.19-orig/src/expand.c 2012-07-21 16:54:31.000000000 +0200
+++ coreutils-8.16/src/expand.c 2012-03-26 17:42:56.000000000 +0200 +++ coreutils-8.19/src/expand.c 2012-08-20 13:54:02.974621693 +0200
@@ -37,12 +37,29 @@ @@ -37,12 +37,29 @@
#include <stdio.h> #include <stdio.h>
#include <getopt.h> #include <getopt.h>
@ -733,7 +733,7 @@ diff -urNp coreutils-8.16-orig/src/expand.c coreutils-8.16/src/expand.c
+ if (convert) + if (convert)
+ { + {
+ ++column; + ++column;
+ if (convert_entire_line == 0) + if (convert_entire_line == 0 && !isblank(*bufpos))
+ convert = 0; + convert = 0;
+ } + }
+ putchar (*bufpos); + putchar (*bufpos);
@ -793,7 +793,7 @@ diff -urNp coreutils-8.16-orig/src/expand.c coreutils-8.16/src/expand.c
+ +
+ width = wcwidth (wc); + width = wcwidth (wc);
+ column += (width > 0) ? width : 0; + column += (width > 0) ? width : 0;
+ if (convert_entire_line == 0) + if (convert_entire_line == 0 && !iswblank(wc))
+ convert = 0; + convert = 0;
+ } + }
+ } + }
@ -823,9 +823,9 @@ diff -urNp coreutils-8.16-orig/src/expand.c coreutils-8.16/src/expand.c
if (have_read_stdin && fclose (stdin) != 0) if (have_read_stdin && fclose (stdin) != 0)
error (EXIT_FAILURE, errno, "-"); error (EXIT_FAILURE, errno, "-");
diff -urNp coreutils-8.16-orig/src/fold.c coreutils-8.16/src/fold.c diff -urNp coreutils-8.19-orig/src/fold.c coreutils-8.19/src/fold.c
--- coreutils-8.16-orig/src/fold.c 2012-03-24 19:22:13.000000000 +0100 --- coreutils-8.19-orig/src/fold.c 2012-07-21 16:54:31.000000000 +0200
+++ coreutils-8.16/src/fold.c 2012-03-26 17:48:37.000000000 +0200 +++ coreutils-8.19/src/fold.c 2012-08-20 13:52:04.066592980 +0200
@@ -22,12 +22,34 @@ @@ -22,12 +22,34 @@
#include <getopt.h> #include <getopt.h>
#include <sys/types.h> #include <sys/types.h>
@ -1223,9 +1223,9 @@ diff -urNp coreutils-8.16-orig/src/fold.c coreutils-8.16/src/fold.c
break; break;
case 's': /* Break at word boundaries. */ case 's': /* Break at word boundaries. */
diff -urNp coreutils-8.16-orig/src/join.c coreutils-8.16/src/join.c diff -urNp coreutils-8.19-orig/src/join.c coreutils-8.19/src/join.c
--- coreutils-8.16-orig/src/join.c 2012-03-24 21:26:51.000000000 +0100 --- coreutils-8.19-orig/src/join.c 2012-07-21 16:54:31.000000000 +0200
+++ coreutils-8.16/src/join.c 2012-03-26 17:50:02.000000000 +0200 +++ coreutils-8.19/src/join.c 2012-08-20 13:52:04.069594876 +0200
@@ -22,18 +22,32 @@ @@ -22,18 +22,32 @@
#include <sys/types.h> #include <sys/types.h>
#include <getopt.h> #include <getopt.h>
@ -1701,9 +1701,9 @@ diff -urNp coreutils-8.16-orig/src/join.c coreutils-8.16/src/join.c
break; break;
case NOCHECK_ORDER_OPTION: case NOCHECK_ORDER_OPTION:
diff -urNp coreutils-8.16-orig/src/pr.c coreutils-8.16/src/pr.c diff -urNp coreutils-8.19-orig/src/pr.c coreutils-8.19/src/pr.c
--- coreutils-8.16-orig/src/pr.c 2012-03-24 21:26:51.000000000 +0100 --- coreutils-8.19-orig/src/pr.c 2012-07-21 16:54:31.000000000 +0200
+++ coreutils-8.16/src/pr.c 2012-03-26 17:50:48.000000000 +0200 +++ coreutils-8.19/src/pr.c 2012-08-20 13:52:04.074593445 +0200
@@ -312,6 +312,32 @@ @@ -312,6 +312,32 @@
#include <getopt.h> #include <getopt.h>
@ -2447,9 +2447,9 @@ diff -urNp coreutils-8.16-orig/src/pr.c coreutils-8.16/src/pr.c
/* We've just printed some files and need to clean up things before /* We've just printed some files and need to clean up things before
looking for more options and printing the next batch of files. looking for more options and printing the next batch of files.
diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c diff -urNp coreutils-8.19-orig/src/sort.c coreutils-8.19/src/sort.c
--- coreutils-8.17-orig/src/sort.c --- coreutils-8.19-orig/src/sort.c 2012-08-18 07:39:29.000000000 +0200
+++ coreutils-8.17/src/sort.c +++ coreutils-8.19/src/sort.c 2012-08-20 13:52:04.079596072 +0200
@@ -29,6 +29,14 @@ @@ -29,6 +29,14 @@
#include <sys/wait.h> #include <sys/wait.h>
#include <signal.h> #include <signal.h>
@ -2465,7 +2465,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
#include "system.h" #include "system.h"
#include "argmatch.h" #include "argmatch.h"
#include "error.h" #include "error.h"
@@ -167,12 +176,34 @@ static int thousands_sep; @@ -166,12 +174,34 @@ static int thousands_sep;
/* Nonzero if the corresponding locales are hard. */ /* Nonzero if the corresponding locales are hard. */
static bool hard_LC_COLLATE; static bool hard_LC_COLLATE;
@ -2501,7 +2501,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
/* The kind of blanks for '-b' to skip in various options. */ /* The kind of blanks for '-b' to skip in various options. */
enum blanktype { bl_start, bl_end, bl_both }; enum blanktype { bl_start, bl_end, bl_both };
@@ -343,13 +374,11 @@ static bool reverse; @@ -345,13 +375,11 @@ static bool reverse;
they were read if all keys compare equal. */ they were read if all keys compare equal. */
static bool stable; static bool stable;
@ -2518,7 +2518,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
/* Flag to remove consecutive duplicate lines from the output. /* Flag to remove consecutive duplicate lines from the output.
Only the last of a sequence of equal lines will be output. */ Only the last of a sequence of equal lines will be output. */
@@ -782,6 +811,46 @@ reap_all (void) @@ -784,6 +812,46 @@ reap_all (void)
reap (-1); reap (-1);
} }
@ -2565,7 +2565,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
/* Clean up any remaining temporary files. */ /* Clean up any remaining temporary files. */
static void static void
@@ -1214,7 +1283,7 @@ zaptemp (char const *name) @@ -1224,7 +1292,7 @@ zaptemp (char const *name)
free (node); free (node);
} }
@ -2574,7 +2574,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
static int static int
struct_month_cmp (void const *m1, void const *m2) struct_month_cmp (void const *m1, void const *m2)
@@ -1229,7 +1298,7 @@ struct_month_cmp (void const *m1, void c @@ -1239,7 +1307,7 @@ struct_month_cmp (void const *m1, void c
/* Initialize the character class tables. */ /* Initialize the character class tables. */
static void static void
@ -2583,7 +2583,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
{ {
size_t i; size_t i;
@@ -1241,7 +1310,7 @@ inittables (void) @@ -1251,7 +1319,7 @@ inittables (void)
fold_toupper[i] = toupper (i); fold_toupper[i] = toupper (i);
} }
@ -2592,7 +2592,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
/* If we're not in the "C" locale, read different names for months. */ /* If we're not in the "C" locale, read different names for months. */
if (hard_LC_TIME) if (hard_LC_TIME)
{ {
@@ -1323,6 +1392,84 @@ specify_nmerge (int oi, char c, char con @@ -1333,6 +1401,84 @@ specify_nmerge (int oi, char c, char con
xstrtol_fatal (e, oi, c, long_options, s); xstrtol_fatal (e, oi, c, long_options, s);
} }
@ -2677,7 +2677,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
/* Specify the amount of main memory to use when sorting. */ /* Specify the amount of main memory to use when sorting. */
static void static void
specify_sort_size (int oi, char c, char const *s) specify_sort_size (int oi, char c, char const *s)
@@ -1551,7 +1698,7 @@ buffer_linelim (struct buffer const *buf @@ -1565,7 +1711,7 @@ buffer_linelim (struct buffer const *buf
by KEY in LINE. */ by KEY in LINE. */
static char * static char *
@ -2686,7 +2686,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
{ {
char *ptr = line->text, *lim = ptr + line->length - 1; char *ptr = line->text, *lim = ptr + line->length - 1;
size_t sword = key->sword; size_t sword = key->sword;
@@ -1560,10 +1707,10 @@ begfield (struct line const *line, struc @@ -1574,10 +1720,10 @@ begfield (struct line const *line, struc
/* The leading field separator itself is included in a field when -t /* The leading field separator itself is included in a field when -t
is absent. */ is absent. */
@ -2699,7 +2699,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
++ptr; ++ptr;
if (ptr < lim) if (ptr < lim)
++ptr; ++ptr;
@@ -1589,11 +1736,70 @@ begfield (struct line const *line, struc @@ -1603,11 +1749,70 @@ begfield (struct line const *line, struc
return ptr; return ptr;
} }
@ -2771,7 +2771,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
{ {
char *ptr = line->text, *lim = ptr + line->length - 1; char *ptr = line->text, *lim = ptr + line->length - 1;
size_t eword = key->eword, echar = key->echar; size_t eword = key->eword, echar = key->echar;
@@ -1608,10 +1814,10 @@ limfield (struct line const *line, struc @@ -1622,10 +1827,10 @@ limfield (struct line const *line, struc
'beginning' is the first character following the delimiting TAB. 'beginning' is the first character following the delimiting TAB.
Otherwise, leave PTR pointing at the first 'blank' character after Otherwise, leave PTR pointing at the first 'blank' character after
the preceding field. */ the preceding field. */
@ -2784,7 +2784,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
++ptr; ++ptr;
if (ptr < lim && (eword || echar)) if (ptr < lim && (eword || echar))
++ptr; ++ptr;
@@ -1657,10 +1863,10 @@ limfield (struct line const *line, struc @@ -1671,10 +1876,10 @@ limfield (struct line const *line, struc
*/ */
/* Make LIM point to the end of (one byte past) the current field. */ /* Make LIM point to the end of (one byte past) the current field. */
@ -2797,7 +2797,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
if (newlim) if (newlim)
lim = newlim; lim = newlim;
} }
@@ -1691,6 +1897,130 @@ limfield (struct line const *line, struc @@ -1705,6 +1910,130 @@ limfield (struct line const *line, struc
return ptr; return ptr;
} }
@ -2928,7 +2928,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
/* Fill BUF reading from FP, moving buf->left bytes from the end /* 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 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 file wasn't terminated by a newline, supply one. Set up BUF's line
@@ -1777,8 +2107,22 @@ fillbuf (struct buffer *buf, FILE *fp, c @@ -1791,8 +2120,22 @@ fillbuf (struct buffer *buf, FILE *fp, c
else else
{ {
if (key->skipsblanks) if (key->skipsblanks)
@ -2953,7 +2953,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
line->keybeg = line_start; line->keybeg = line_start;
} }
} }
@@ -1899,7 +2243,7 @@ human_numcompare (char const *a, char co @@ -1913,7 +2256,7 @@ human_numcompare (char const *a, char co
hideously fast. */ hideously fast. */
static int static int
@ -2962,7 +2962,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
{ {
while (blanks[to_uchar (*a)]) while (blanks[to_uchar (*a)])
a++; a++;
@@ -1909,6 +2253,25 @@ numcompare (char const *a, char const *b @@ -1923,6 +2266,25 @@ numcompare (char const *a, char const *b
return strnumcmp (a, b, decimal_point, thousands_sep); return strnumcmp (a, b, decimal_point, thousands_sep);
} }
@ -2988,7 +2988,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
/* Work around a problem whereby the long double value returned by glibc's /* Work around a problem whereby the long double value returned by glibc's
strtold ("NaN", ...) contains uninitialized bits: clear all bytes of strtold ("NaN", ...) contains uninitialized bits: clear all bytes of
A and B before calling strtold. FIXME: remove this function once A and B before calling strtold. FIXME: remove this function once
@@ -1959,7 +2322,7 @@ general_numcompare (char const *sa, char @@ -1973,7 +2335,7 @@ general_numcompare (char const *sa, char
Return 0 if the name in S is not recognized. */ Return 0 if the name in S is not recognized. */
static int static int
@ -2997,7 +2997,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
{ {
size_t lo = 0; size_t lo = 0;
size_t hi = MONTHS_PER_YEAR; size_t hi = MONTHS_PER_YEAR;
@@ -2234,15 +2597,14 @@ debug_key (struct line const *line, stru @@ -2248,15 +2610,14 @@ debug_key (struct line const *line, stru
char saved = *lim; char saved = *lim;
*lim = '\0'; *lim = '\0';
@ -3015,7 +3015,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
else if (key->general_numeric) else if (key->general_numeric)
ignore_value (strtold (beg, &tighter_lim)); ignore_value (strtold (beg, &tighter_lim));
else if (key->numeric || key->human_numeric) else if (key->numeric || key->human_numeric)
@@ -2386,7 +2748,7 @@ key_warnings (struct keyfield const *gke @@ -2400,7 +2761,7 @@ key_warnings (struct keyfield const *gke
bool maybe_space_aligned = !hard_LC_COLLATE && default_key_compare (key) bool maybe_space_aligned = !hard_LC_COLLATE && default_key_compare (key)
&& !(key->schar || key->echar); && !(key->schar || key->echar);
bool line_offset = key->eword == 0 && key->echar != 0; /* -k1.x,1.y */ bool line_offset = key->eword == 0 && key->echar != 0; /* -k1.x,1.y */
@ -3024,7 +3024,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
&& ((!key->skipsblanks && !(implicit_skip || maybe_space_aligned)) && ((!key->skipsblanks && !(implicit_skip || maybe_space_aligned))
|| (!key->skipsblanks && key->schar) || (!key->skipsblanks && key->schar)
|| (!key->skipeblanks && key->echar))) || (!key->skipeblanks && key->echar)))
@@ -2444,11 +2806,83 @@ key_warnings (struct keyfield const *gke @@ -2458,11 +2819,83 @@ key_warnings (struct keyfield const *gke
error (0, 0, _("option '-r' only applies to last-resort comparison")); error (0, 0, _("option '-r' only applies to last-resort comparison"));
} }
@ -3109,7 +3109,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
{ {
struct keyfield *key = keylist; struct keyfield *key = keylist;
@@ -2533,7 +2967,7 @@ keycompare (struct line const *a, struct @@ -2547,7 +2980,7 @@ keycompare (struct line const *a, struct
else if (key->human_numeric) else if (key->human_numeric)
diff = human_numcompare (ta, tb); diff = human_numcompare (ta, tb);
else if (key->month) else if (key->month)
@ -3118,7 +3118,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
else if (key->random) else if (key->random)
diff = compare_random (ta, tlena, tb, tlenb); diff = compare_random (ta, tlena, tb, tlenb);
else if (key->version) else if (key->version)
@@ -2649,6 +3083,180 @@ keycompare (struct line const *a, struct @@ -2663,6 +3096,180 @@ keycompare (struct line const *a, struct
return key->reverse ? -diff : diff; return key->reverse ? -diff : diff;
} }
@ -3299,7 +3299,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
/* Compare two lines A and B, returning negative, zero, or positive /* Compare two lines A and B, returning negative, zero, or positive
depending on whether A compares less than, equal to, or greater than B. */ depending on whether A compares less than, equal to, or greater than B. */
@@ -4109,7 +4717,7 @@ main (int argc, char **argv) @@ -4158,7 +4765,7 @@ main (int argc, char **argv)
initialize_exit_failure (SORT_FAILURE); initialize_exit_failure (SORT_FAILURE);
hard_LC_COLLATE = hard_locale (LC_COLLATE); hard_LC_COLLATE = hard_locale (LC_COLLATE);
@ -3308,7 +3308,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
hard_LC_TIME = hard_locale (LC_TIME); hard_LC_TIME = hard_locale (LC_TIME);
#endif #endif
@@ -4130,6 +4738,29 @@ main (int argc, char **argv) @@ -4179,6 +4786,29 @@ main (int argc, char **argv)
thousands_sep = -1; thousands_sep = -1;
} }
@ -3338,7 +3338,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
have_read_stdin = false; have_read_stdin = false;
inittables (); inittables ();
@@ -4400,13 +5031,34 @@ main (int argc, char **argv) @@ -4453,13 +5083,34 @@ main (int argc, char **argv)
case 't': case 't':
{ {
@ -3377,7 +3377,7 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
else else
{ {
/* Provoke with 'sort -txx'. Complain about /* Provoke with 'sort -txx'. Complain about
@@ -4417,9 +5069,12 @@ main (int argc, char **argv) @@ -4470,9 +5121,12 @@ main (int argc, char **argv)
quote (optarg)); quote (optarg));
} }
} }
@ -3392,9 +3392,9 @@ diff -urNp coreutils-8.17-orig/src/sort.c coreutils-8.17/src/sort.c
} }
break; break;
diff -urNp coreutils-8.16-orig/src/unexpand.c coreutils-8.16/src/unexpand.c diff -urNp coreutils-8.19-orig/src/unexpand.c coreutils-8.19/src/unexpand.c
--- coreutils-8.16-orig/src/unexpand.c 2012-03-24 21:26:51.000000000 +0100 --- coreutils-8.19-orig/src/unexpand.c 2012-07-21 16:54:31.000000000 +0200
+++ coreutils-8.16/src/unexpand.c 2012-03-26 17:51:46.000000000 +0200 +++ coreutils-8.19/src/unexpand.c 2012-08-20 13:52:04.081596774 +0200
@@ -38,12 +38,29 @@ @@ -38,12 +38,29 @@
#include <stdio.h> #include <stdio.h>
#include <getopt.h> #include <getopt.h>
@ -3648,9 +3648,9 @@ diff -urNp coreutils-8.16-orig/src/unexpand.c coreutils-8.16/src/unexpand.c
if (have_read_stdin && fclose (stdin) != 0) if (have_read_stdin && fclose (stdin) != 0)
error (EXIT_FAILURE, errno, "-"); error (EXIT_FAILURE, errno, "-");
diff -urNp coreutils-8.16-orig/src/uniq.c coreutils-8.16/src/uniq.c diff -urNp coreutils-8.19-orig/src/uniq.c coreutils-8.19/src/uniq.c
--- coreutils-8.16-orig/src/uniq.c 2012-03-24 21:26:51.000000000 +0100 --- coreutils-8.19-orig/src/uniq.c 2012-07-21 16:54:31.000000000 +0200
+++ coreutils-8.16/src/uniq.c 2012-03-26 17:35:09.000000000 +0200 +++ coreutils-8.19/src/uniq.c 2012-08-20 13:52:04.083502506 +0200
@@ -21,6 +21,16 @@ @@ -21,6 +21,16 @@
#include <getopt.h> #include <getopt.h>
#include <sys/types.h> #include <sys/types.h>
@ -4016,10 +4016,10 @@ diff -urNp coreutils-8.16-orig/src/uniq.c coreutils-8.16/src/uniq.c
skip_chars = 0; skip_chars = 0;
skip_fields = 0; skip_fields = 0;
check_chars = SIZE_MAX; check_chars = SIZE_MAX;
diff -urNp coreutils-8.16-orig/tests/Makefile.am coreutils-8.16/tests/Makefile.am diff -urNp coreutils-8.19-orig/tests/Makefile.am coreutils-8.19/tests/Makefile.am
--- coreutils-8.16-orig/tests/Makefile.am 2012-03-26 18:01:35.564014659 +0200 --- coreutils-8.19-orig/tests/Makefile.am 2012-08-20 13:51:39.856841699 +0200
+++ coreutils-8.16/tests/Makefile.am 2012-03-26 18:02:01.023015013 +0200 +++ coreutils-8.19/tests/Makefile.am 2012-08-20 13:52:04.085491266 +0200
@@ -242,6 +242,7 @@ TESTS = \ @@ -247,6 +247,7 @@ TESTS = \
misc/sort-debug-warn \ misc/sort-debug-warn \
misc/sort-discrim \ misc/sort-discrim \
misc/sort-files0-from \ misc/sort-files0-from \
@ -4027,7 +4027,7 @@ diff -urNp coreutils-8.16-orig/tests/Makefile.am coreutils-8.16/tests/Makefile.a
misc/sort-float \ misc/sort-float \
misc/sort-merge \ misc/sort-merge \
misc/sort-merge-fdlimit \ misc/sort-merge-fdlimit \
@@ -537,6 +538,10 @@ TESTS = \ @@ -551,6 +552,10 @@ TESTS = \
$(root_tests) $(root_tests)
pr_data = \ pr_data = \
@ -4038,9 +4038,9 @@ diff -urNp coreutils-8.16-orig/tests/Makefile.am coreutils-8.16/tests/Makefile.a
pr/0F \ pr/0F \
pr/0FF \ pr/0FF \
pr/0FFnt \ pr/0FFnt \
diff -urNp coreutils-8.16-orig/tests/misc/cut coreutils-8.16/tests/misc/cut diff -urNp coreutils-8.19-orig/tests/misc/cut coreutils-8.19/tests/misc/cut
--- coreutils-8.16-orig/tests/misc/cut 2012-02-03 10:22:06.000000000 +0100 --- coreutils-8.19-orig/tests/misc/cut 2012-07-21 16:54:31.000000000 +0200
+++ coreutils-8.16/tests/misc/cut 2012-03-26 17:40:49.000000000 +0200 +++ coreutils-8.19/tests/misc/cut 2012-08-20 13:52:04.086593767 +0200
@@ -23,14 +23,15 @@ use strict; @@ -23,14 +23,15 @@ use strict;
# Turn off localization of executable's output. # Turn off localization of executable's output.
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3; @ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
@ -4070,41 +4070,98 @@ diff -urNp coreutils-8.16-orig/tests/misc/cut coreutils-8.16/tests/misc/cut
['inval2', qw(-f -), {IN=>''}, {OUT=>''}, {EXIT=>1}, {ERR=>$no_endpoint}], ['inval2', qw(-f -), {IN=>''}, {OUT=>''}, {EXIT=>1}, {ERR=>$no_endpoint}],
['inval3', '-f', '4,-', {IN=>''}, {OUT=>''}, {EXIT=>1}, {ERR=>$no_endpoint}], ['inval3', '-f', '4,-', {IN=>''}, {OUT=>''}, {EXIT=>1}, {ERR=>$no_endpoint}],
['inval4', '-f', '1-2,-', {IN=>''}, {OUT=>''}, {EXIT=>1}, ['inval4', '-f', '1-2,-', {IN=>''}, {OUT=>''}, {EXIT=>1},
diff -urNp coreutils-8.16-orig/tests/misc/mb1.I coreutils-8.16/tests/misc/mb1.I diff -urNp coreutils-8.19-orig/tests/misc/expand coreutils-8.19/tests/misc/expand
--- coreutils-8.16-orig/tests/misc/mb1.I 1970-01-01 01:00:00.000000000 +0100 --- coreutils-8.19-orig/tests/misc/expand 2012-07-21 16:54:31.000000000 +0200
+++ coreutils-8.16/tests/misc/mb1.I 2012-03-26 17:35:09.000000000 +0200 +++ coreutils-8.19/tests/misc/expand 2012-08-20 13:55:44.188467648 +0200
@@ -23,6 +23,15 @@ use strict;
# Turn off localization of executable's output.
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
+# uncommented according to upstream commit enabling multibyte paths
+my $mb_locale = $ENV{LOCALE_FR_UTF8};
+! defined $mb_locale || $mb_locale eq 'none'
+ and $mb_locale = 'C';
+
+my $prog = 'expand';
+my $try = "Try \`$prog --help' for more information.\n";
+my $inval = "$prog: invalid byte, character or field list\n$try";
+
my @Tests =
(
['t1', '--tabs=3', {IN=>"a\tb"}, {OUT=>"a b"}],
@@ -31,6 +40,37 @@ my @Tests =
['i2', '--tabs=3 -i', {IN=>" \ta\tb"}, {OUT=>" a\tb"}],
);
+if ($mb_locale ne 'C')
+ {
+ # Duplicate each test vector, appending "-mb" to the test name and
+ # inserting {ENV => "LC_ALL=$mb_locale"} in the copy, so that we
+ # provide coverage for the distro-added multi-byte code paths.
+ my @new;
+ foreach my $t (@Tests)
+ {
+ my @new_t = @$t;
+ my $test_name = shift @new_t;
+
+ # Depending on whether expand is multi-byte-patched,
+ # it emits different diagnostics:
+ # non-MB: invalid byte or field list
+ # MB: invalid byte, character or field list
+ # Adjust the expected error output accordingly.
+ if (grep {ref $_ eq 'HASH' && exists $_->{ERR} && $_->{ERR} eq $inval}
+ (@new_t))
+ {
+ my $sub = {ERR_SUBST => 's/, character//'};
+ push @new_t, $sub;
+ push @$t, $sub;
+ }
+ push @new, ["$test_name-mb", @new_t, {ENV => "LC_ALL=$mb_locale"}];
+ }
+ push @Tests, @new;
+ }
+
+
+@Tests = triple_test \@Tests;
+
my $save_temps = $ENV{DEBUG};
my $verbose = $ENV{VERBOSE};
diff -urNp coreutils-8.19-orig/tests/misc/mb1.I coreutils-8.19/tests/misc/mb1.I
--- coreutils-8.19-orig/tests/misc/mb1.I 1970-01-01 01:00:00.000000000 +0100
+++ coreutils-8.19/tests/misc/mb1.I 2012-08-20 13:52:04.086593767 +0200
@@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
+Apple10 +Apple10
+Banana5 +Banana5
+Citrus20 +Citrus20
+Cherry30 +Cherry30
diff -urNp coreutils-8.16-orig/tests/misc/mb1.X coreutils-8.16/tests/misc/mb1.X diff -urNp coreutils-8.19-orig/tests/misc/mb1.X coreutils-8.19/tests/misc/mb1.X
--- coreutils-8.16-orig/tests/misc/mb1.X 1970-01-01 01:00:00.000000000 +0100 --- coreutils-8.19-orig/tests/misc/mb1.X 1970-01-01 01:00:00.000000000 +0100
+++ coreutils-8.16/tests/misc/mb1.X 2012-03-26 17:35:09.000000000 +0200 +++ coreutils-8.19/tests/misc/mb1.X 2012-08-20 13:52:04.087526516 +0200
@@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
+Banana5 +Banana5
+Apple10 +Apple10
+Citrus20 +Citrus20
+Cherry30 +Cherry30
diff -urNp coreutils-8.16-orig/tests/misc/mb2.I coreutils-8.16/tests/misc/mb2.I diff -urNp coreutils-8.19-orig/tests/misc/mb2.I coreutils-8.19/tests/misc/mb2.I
--- coreutils-8.16-orig/tests/misc/mb2.I 1970-01-01 01:00:00.000000000 +0100 --- coreutils-8.19-orig/tests/misc/mb2.I 1970-01-01 01:00:00.000000000 +0100
+++ coreutils-8.16/tests/misc/mb2.I 2012-03-26 17:35:09.000000000 +0200 +++ coreutils-8.19/tests/misc/mb2.I 2012-08-20 13:52:04.088593815 +0200
@@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
+Apple1020 +Apple1020
+Banana530 +Banana530
+Citrus205 +Citrus205
+Cherry3010 +Cherry3010
diff -urNp coreutils-8.16-orig/tests/misc/mb2.X coreutils-8.16/tests/misc/mb2.X diff -urNp coreutils-8.19-orig/tests/misc/mb2.X coreutils-8.19/tests/misc/mb2.X
--- coreutils-8.16-orig/tests/misc/mb2.X 1970-01-01 01:00:00.000000000 +0100 --- coreutils-8.19-orig/tests/misc/mb2.X 1970-01-01 01:00:00.000000000 +0100
+++ coreutils-8.16/tests/misc/mb2.X 2012-03-26 17:35:09.000000000 +0200 +++ coreutils-8.19/tests/misc/mb2.X 2012-08-20 13:52:04.088593815 +0200
@@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
+Citrus205 +Citrus205
+Cherry3010 +Cherry3010
+Apple1020 +Apple1020
+Banana530 +Banana530
diff -urNp coreutils-8.16-orig/tests/misc/sort-mb-tests coreutils-8.16/tests/misc/sort-mb-tests diff -urNp coreutils-8.19-orig/tests/misc/sort-mb-tests coreutils-8.19/tests/misc/sort-mb-tests
--- coreutils-8.16-orig/tests/misc/sort-mb-tests 1970-01-01 01:00:00.000000000 +0100 --- coreutils-8.19-orig/tests/misc/sort-mb-tests 1970-01-01 01:00:00.000000000 +0100
+++ coreutils-8.16/tests/misc/sort-mb-tests 2012-03-26 17:35:09.000000000 +0200 +++ coreutils-8.19/tests/misc/sort-mb-tests 2012-08-20 13:52:04.089593318 +0200
@@ -0,0 +1,58 @@ @@ -0,0 +1,58 @@
+#! /bin/sh +#! /bin/sh
+case $# in +case $# in

View File

@ -376,6 +376,7 @@ fi
%changelog %changelog
* Mon Aug 20 2012 Ondrej Vasik <ovasik@redhat.com> 8.19-1 * Mon Aug 20 2012 Ondrej Vasik <ovasik@redhat.com> 8.19-1
- new upstream release 8.19 - new upstream release 8.19
- fix multibyte issues in cut and expand (M.Briza, #821260)
* Sun Aug 12 2012 Ondrej Vasik <ovasik@redhat.com> 8.18-1 * Sun Aug 12 2012 Ondrej Vasik <ovasik@redhat.com> 8.18-1
- new upstream release 8.18 - new upstream release 8.18