diff options
author | aiju <devnull@localhost> | 2018-02-07 18:53:08 +0000 |
---|---|---|
committer | aiju <devnull@localhost> | 2018-02-07 18:53:08 +0000 |
commit | af0de5ada83205e6016b108a2f19dbc5782d5e8e (patch) | |
tree | 4c9ef6685e6b33459e501336f10e0103abe8ae2f /sys | |
parent | d8999511e0921e2aaa45f862c5b4ca9098d78a96 (diff) |
fix sort(1) bug where it incorrectly included the field separator in the comparison if it was >= Runeself
Diffstat (limited to 'sys')
-rw-r--r-- | sys/src/cmd/sort.c | 15 |
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) { |