From 0506e292b518a04846ae1f611ecc0633969a2801 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Mon, 19 Oct 2015 19:27:26 +0200 Subject: [PATCH] sort: fix ENDCHAR handling in "-kSTART,N.ENDCHAR" function old new delta get_key 505 503 -2 Signed-off-by: Denys Vlasenko --- coreutils/sort.c | 7 ++++--- testsuite/sort.tests | 8 ++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/coreutils/sort.c b/coreutils/sort.c index f2bc5335f..07d903388 100644 --- a/coreutils/sort.c +++ b/coreutils/sort.c @@ -160,17 +160,18 @@ static char *get_key(char *str, struct sort_key *key, int flags) if (!j) start = end; } /* Strip leading whitespace if necessary */ -//XXX: skip_whitespace() if (flags & FLAG_b) + /* not using skip_whitespace() for speed */ while (isspace(str[start])) start++; /* Strip trailing whitespace if necessary */ if (flags & FLAG_bb) while (end > start && isspace(str[end-1])) end--; - /* Handle offsets on start and end */ + /* -kSTART,N.ENDCHAR: honor ENDCHAR (1-based) */ if (key->range[3]) { - end += key->range[3] - 1; + end = key->range[3]; if (end > len) end = len; } + /* -kN.STARTCHAR[,...]: honor STARTCHAR (1-based) */ if (key->range[1]) { start += key->range[1] - 1; if (start > len) start = len; diff --git a/testsuite/sort.tests b/testsuite/sort.tests index 39c7af738..c51a8e475 100755 --- a/testsuite/sort.tests +++ b/testsuite/sort.tests @@ -106,6 +106,14 @@ a/a:a a:b " "" +testing "sort with ENDCHAR" "sort -t. -k1,1.1 -k2 input" "\ +ab.1 +aa.2 +" "\ +aa.2 +ab.1 +" "" + testing "glibc build sort" "sort -t. -k 1,1 -k 2n,2n -k 3 input" "\ GLIBC_2.1 GLIBC_2.1.1