summaryrefslogtreecommitdiff
path: root/sys/src/cmd
diff options
context:
space:
mode:
authoraiju <devnull@localhost>2018-02-07 18:53:08 +0000
committeraiju <devnull@localhost>2018-02-07 18:53:08 +0000
commitaf0de5ada83205e6016b108a2f19dbc5782d5e8e (patch)
tree4c9ef6685e6b33459e501336f10e0103abe8ae2f /sys/src/cmd
parentd8999511e0921e2aaa45f862c5b4ca9098d78a96 (diff)
fix sort(1) bug where it incorrectly included the field separator in the comparison if it was >= Runeself
Diffstat (limited to 'sys/src/cmd')
-rw-r--r--sys/src/cmd/sort.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/sys/src/cmd/sort.c b/sys/src/cmd/sort.c
index 3fe172ceb..0cc207174 100644
--- a/sys/src/cmd/sort.c
+++ b/sys/src/cmd/sort.c
@@ -941,13 +941,14 @@ doargs(int argc, char *argv[])
uchar*
skip(uchar *l, int n1, int n2, int bflag, int endfield)
{
- int i, c, tc;
+ int i, c, ln, tc;
Rune r;
if(endfield && n1 < 0)
return 0;
c = *l++;
+ ln = 1;
tc = args.tabchar;
if(tc) {
if(tc < Runeself) {
@@ -962,15 +963,15 @@ skip(uchar *l, int n1, int n2, int bflag, int endfield)
}
} else {
l--;
- l += chartorune(&r, (char*)l);
+ l += ln = chartorune(&r, (char*)l);
for(i=n1; i>0; i--) {
while(r != tc) {
if(r == '\n')
return 0;
- l += chartorune(&r, (char*)l);
+ l += ln = chartorune(&r, (char*)l);
}
if(!(endfield && i == 1))
- l += chartorune(&r, (char*)l);
+ l += ln = chartorune(&r, (char*)l);
}
c = r;
}
@@ -987,10 +988,12 @@ skip(uchar *l, int n1, int n2, int bflag, int endfield)
}
if(bflag)
- while(c == ' ' || c == '\t')
+ while(c == ' ' || c == '\t'){
c = *l++;
+ ln = 1;
+ }
- l--;
+ l -= ln;
for(i=n2; i>0; i--) {
c = *l;
if(c < Runeself) {