From 0506e292b518a04846ae1f611ecc0633969a2801 Mon Sep 17 00:00:00 2001
From: Denys Vlasenko <vda.linux@googlemail.com>
Date: Mon, 19 Oct 2015 19:27:26 +0200
Subject: sort: fix ENDCHAR handling in "-kSTART,N.ENDCHAR"

function                                             old     new   delta
get_key                                              505     503      -2

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
---
 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
-- 
cgit v1.2.3-55-g6feb