fix couple of bugs in sort with determining end of fields (upstream) -
includes #485715 fix
This commit is contained in:
parent
be82102c5b
commit
49c94e6cef
86
coreutils-7.1-sort-endoffields.patch
Normal file
86
coreutils-7.1-sort-endoffields.patch
Normal file
@ -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"}],
|
@ -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 <ovasik@redhat.com> 7.1-3
|
||||
- fix couple of bugs (including #485715) in sort with
|
||||
determining end of fields(upstream)
|
||||
|
||||
* Wed Feb 25 2009 Ondrej Vasik <ovasik@redhat.com> 7.1-2
|
||||
- workaround libcap issue with broken headers (#483548)
|
||||
- fix gnulib testsuite failure (4x77 (skip) is not
|
||||
|
Loading…
Reference in New Issue
Block a user