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>
This commit is contained in:
parent
d1ed3e68b8
commit
0506e292b5
@ -160,17 +160,18 @@ static char *get_key(char *str, struct sort_key *key, int flags)
|
|||||||
if (!j) start = end;
|
if (!j) start = end;
|
||||||
}
|
}
|
||||||
/* Strip leading whitespace if necessary */
|
/* Strip leading whitespace if necessary */
|
||||||
//XXX: skip_whitespace()
|
|
||||||
if (flags & FLAG_b)
|
if (flags & FLAG_b)
|
||||||
|
/* not using skip_whitespace() for speed */
|
||||||
while (isspace(str[start])) start++;
|
while (isspace(str[start])) start++;
|
||||||
/* Strip trailing whitespace if necessary */
|
/* Strip trailing whitespace if necessary */
|
||||||
if (flags & FLAG_bb)
|
if (flags & FLAG_bb)
|
||||||
while (end > start && isspace(str[end-1])) end--;
|
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]) {
|
if (key->range[3]) {
|
||||||
end += key->range[3] - 1;
|
end = key->range[3];
|
||||||
if (end > len) end = len;
|
if (end > len) end = len;
|
||||||
}
|
}
|
||||||
|
/* -kN.STARTCHAR[,...]: honor STARTCHAR (1-based) */
|
||||||
if (key->range[1]) {
|
if (key->range[1]) {
|
||||||
start += key->range[1] - 1;
|
start += key->range[1] - 1;
|
||||||
if (start > len) start = len;
|
if (start > len) start = len;
|
||||||
|
@ -106,6 +106,14 @@ a/a:a
|
|||||||
a:b
|
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" "\
|
testing "glibc build sort" "sort -t. -k 1,1 -k 2n,2n -k 3 input" "\
|
||||||
GLIBC_2.1
|
GLIBC_2.1
|
||||||
GLIBC_2.1.1
|
GLIBC_2.1.1
|
||||||
|
Loading…
Reference in New Issue
Block a user