diff --git a/coreutils-7.1-sort-endoffields.patch b/coreutils-7.1-sort-endoffields.patch new file mode 100644 index 0000000..22e336f --- /dev/null +++ b/coreutils-7.1-sort-endoffields.patch @@ -0,0 +1,86 @@ +diff -urNp coreutils-7.1-orig/src/sort.c coreutils-7.1/src/sort.c +--- coreutils-7.1-orig/src/sort.c 2009-02-25 16:15:52.000000000 +0100 ++++ coreutils-7.1/src/sort.c 2009-02-25 16:20:35.000000000 +0100 +@@ -1598,6 +1598,9 @@ limfield_uni (const struct line *line, c + size_t eword = key->eword, echar = key->echar; + size_t remaining_bytes; + ++ if (echar == 0) ++ eword++; /* skip all of end field. */ ++ + /* Move PTR past EWORD fields or to one past the last byte on LINE, + whichever comes first. If there are more than EWORD fields, leave + PTR pointing at the beginning of the field having zero-based index, +@@ -1673,19 +1676,22 @@ limfield_uni (const struct line *line, c + } + #endif + +- /* If we're ignoring leading blanks when computing the End +- of the field, don't start counting bytes until after skipping +- past any leading blanks. */ +- if (key->skipeblanks) +- while (ptr < lim && blanks[to_uchar (*ptr)]) +- ++ptr; + +- /* Advance PTR by ECHAR (if possible), but no further than LIM. */ +- remaining_bytes = lim - ptr; +- if (echar < remaining_bytes) +- ptr += echar; +- else +- ptr = lim; ++ if (echar != 0) /* We need to skip over a portion of the end field. */ ++ { ++ if (key->skipeblanks) /* blanks not counted in echar. */ ++ { ++ while (ptr < lim && blanks[to_uchar (*ptr)]) ++ ++ptr; ++ } ++ ++ /* Advance PTR by ECHAR (if possible), but no further than LIM. */ ++ remaining_bytes = lim - ptr; ++ if (echar < remaining_bytes) ++ ptr += echar; ++ else ++ ptr = lim; ++ } + + return ptr; + } +@@ -3736,12 +3742,9 @@ main (int argc, char **argv) + badfieldspec (optarg, N_("field number is zero")); + } + if (*s == '.') +- s = parse_field_count (s + 1, &key->echar, +- N_("invalid number after `.'")); +- else + { +- /* `-k 2,3' is equivalent to `+1 -3'. */ +- key->eword++; ++ s = parse_field_count (s + 1, &key->echar, ++ N_("invalid number after `.'")); + } + s = set_ordering (s, key, bl_end); + } +diff -urNp coreutils-7.1-orig/tests/misc/sort coreutils-7.1/tests/misc/sort +--- coreutils-7.1-orig/tests/misc/sort 2009-01-27 22:11:25.000000000 +0100 ++++ coreutils-7.1/tests/misc/sort 2009-02-25 16:21:48.000000000 +0100 +@@ -110,6 +110,8 @@ my @Tests = + ["07b", '-k 2,3', {IN=>"a a b\nz a a\n"}, {OUT=>"z a a\na a b\n"}], + ["07c", '-k 2,3', {IN=>"y k b\nz k a\n"}, {OUT=>"z k a\ny k b\n"}], + ["07d", '+1 -3', {IN=>"y k b\nz k a\n"}, {OUT=>"z k a\ny k b\n"}], ++["07e", '-k 2,3.0', {IN=>"a a b\nz a a\n"}, {OUT=>"z a a\na a b\n"}], ++ + # + # report an error for `.' without following char spec + ["08a", '-k 2.,3', {EXIT=>2}, +@@ -210,6 +212,10 @@ my @Tests = + # key start and key end. + ["18e", '-nb -k1.1,1.2', {IN=>" 901\n100\n"}, {OUT=>"100\n 901\n"}], + ++# When ignoring leading blanks for end position, ensure blanks from ++# next field are not included in the sort. I.E. order should not change here. ++["18f", '-k1,1b', {IN=>"a y\na z\n"}, {OUT=>"a y\na z\n"}], ++ + # This looks odd, but works properly -- 2nd keyspec is never + # used because all lines are different. + ["19a", '+0 +1nr', {IN=>"b 2\nb 1\nb 3\n"}, {OUT=>"b 1\nb 2\nb 3\n"}], diff --git a/coreutils.spec b/coreutils.spec index cedba46..a9836da 100644 --- a/coreutils.spec +++ b/coreutils.spec @@ -1,7 +1,7 @@ Summary: A set of basic GNU tools commonly used in shell scripts Name: coreutils Version: 7.1 -Release: 2%{?dist} +Release: 3%{?dist} License: GPLv3+ Group: System Environment/Base Url: http://www.gnu.org/software/coreutils/ @@ -19,6 +19,7 @@ Source202: coreutils-su-l.pamd Source203: coreutils-runuser-l.pamd # From upstream +Patch1: coreutils-7.1-sort-endoffields.patch # Our patches Patch100: coreutils-6.10-configuration.patch @@ -98,6 +99,7 @@ the old GNU fileutils, sh-utils, and textutils packages. %setup -q # From upstream +%patch1 -p1 -b .endfield # Our patches %patch100 -p1 -b .configure @@ -309,6 +311,10 @@ fi /sbin/runuser %changelog +* Wed Feb 25 2009 Ondrej Vasik 7.1-3 +- fix couple of bugs (including #485715) in sort with + determining end of fields(upstream) + * Wed Feb 25 2009 Ondrej Vasik 7.1-2 - workaround libcap issue with broken headers (#483548) - fix gnulib testsuite failure (4x77 (skip) is not