diff options
author | Cliff Miller <cbm@whatexit.org> | 2009-06-11 18:30:32 +0100 |
---|---|---|
committer | Pádraig Brady <P@draigBrady.com> | 2009-06-13 01:25:06 +0100 |
commit | 24c727d3c26122c4f1c29381e7c6f5d96985ccca (patch) | |
tree | 24443f3009e77d0ae83758b8f17147c0955d80ac | |
parent | ba1c5239bc4b9719a20cedd35a313fa4237e7151 (diff) | |
download | coreutils-24c727d3c26122c4f1c29381e7c6f5d96985ccca.tar.xz |
sort: Ignore fields where end position is before the start position
* NEWS: Mention the fix
* THANKS: Add Cliff Miller
* src/sort.c (keycompare): Ensure lima >= texta
* tests/misc/sort: Add 3 corresponding tests
Signed-off-by: Pádraig Brady <P@draigBrady.com>
-rw-r--r-- | NEWS | 5 | ||||
-rw-r--r-- | THANKS | 1 | ||||
-rw-r--r-- | src/sort.c | 8 | ||||
-rwxr-xr-x | tests/misc/sort | 4 |
4 files changed, 16 insertions, 2 deletions
@@ -7,6 +7,11 @@ GNU coreutils NEWS -*- outline -*- truncate -s failed to skip all whitespace in the option argument in some locales. + sort now correctly ignores fields whose ending position is specified + before the start position. Previously in numeric mode the remaining + part of the line after the start position was used as the sort key. + [This bug appears to have been present in "the beginning".] + ** Changes in behavior ls --color: files with multiple hard links are no longer colored differently @@ -112,6 +112,7 @@ Christophe LYON christophe.lyon@st.com Chuck Hedrick hedrick@klinzhai.rutgers.edu Clark Morgan cmorgan@aracnet.com Clement Wang clem.wang@overture.com +Cliff Miller cbm@whatexit.org Colin Plumb colin@nyx.net Colin Watson cjw44@riva.ucam.org Collin Rogowski collin@rogowski.de diff --git a/src/sort.c b/src/sort.c index d571ddf02..6acec070d 100644 --- a/src/sort.c +++ b/src/sort.c @@ -1998,9 +1998,13 @@ keycompare (const struct line *a, const struct line *b) char const *translate = key->translate; bool const *ignore = key->ignore; + /* Treat field ends before field starts as empty fields. */ + lima = MAX (texta, lima); + limb = MAX (textb, limb); + /* Find the lengths. */ - size_t lena = lima <= texta ? 0 : lima - texta; - size_t lenb = limb <= textb ? 0 : limb - textb; + size_t lena = lima - texta; + size_t lenb = limb - textb; /* Actually compare the fields. */ diff --git a/tests/misc/sort b/tests/misc/sort index ae3bd8e49..21e7af8e9 100755 --- a/tests/misc/sort +++ b/tests/misc/sort @@ -134,6 +134,10 @@ my @Tests = ["07d", '+1 -3', {IN=>"y k b\nz k a\n"}, {OUT=>"z k a\ny k b\n"}], # ensure a character position of 0 includes whole field ["07e", '-k 2,3.0', {IN=>"a a b\nz a a\n"}, {OUT=>"z a a\na a b\n"}], +# ensure fields with end position before start are ignored +["07f", '-n -k1.3,1.1', {IN=>"a 2\nb 1\n"}, {OUT=>"a 2\nb 1\n"}], +["07g", '-n -k2.2,1.2', {IN=>"aa 2\nbb 1\n"}, {OUT=>"aa 2\nbb 1\n"}], +["07h", '-k1.3nb,1.3', {IN=>" a 2\n b 1\n"}, {OUT=>" a 2\n b 1\n"}], # # report an error for `.' without following char spec ["08a", '-k 2.,3', {EXIT=>2}, |