diff options
author | Bram Moolenaar <Bram@vim.org> | 2018-08-20 22:53:04 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2018-08-20 22:53:04 +0200 |
commit | c26f7c60532a37a2bf0a5e69aa81081b440dfc38 (patch) | |
tree | 4a717b3db6cc51d60cb286af087ee0e7e1eeba6a | |
parent | f1883479be91550bc31dd88f593b3012863a2629 (diff) |
patch 8.1.0303: line2byte() is wrong for last line with 'noeol'v8.1.0303
Problem: line2byte() is wrong for last line with 'noeol' and 'nofixeol'.
Solution: Fix off-by-one error. (Shane Harper, closes #3351)
-rw-r--r-- | src/memline.c | 2 | ||||
-rw-r--r-- | src/testdir/test_functions.vim | 12 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 14 insertions, 2 deletions
diff --git a/src/memline.c b/src/memline.c index a2f0b4f626..fb262acef5 100644 --- a/src/memline.c +++ b/src/memline.c @@ -5267,7 +5267,7 @@ ml_find_line_or_offset(buf_T *buf, linenr_T lnum, long *offp) /* Don't count the last line break if 'noeol' and ('bin' or * 'nofixeol'). */ if ((!buf->b_p_fixeol || buf->b_p_bin) && !buf->b_p_eol - && buf->b_ml.ml_line_count == lnum) + && lnum > buf->b_ml.ml_line_count) size -= ffdos + 1; } diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim index 13db0041e7..848e7986c3 100644 --- a/src/testdir/test_functions.vim +++ b/src/testdir/test_functions.vim @@ -682,6 +682,7 @@ endfunc func Test_byte2line_line2byte() new + set endofline call setline(1, ['a', 'bc', 'd']) set fileformat=unix @@ -702,7 +703,16 @@ func Test_byte2line_line2byte() call assert_equal([-1, -1, 1, 4, 8, 11, -1], \ map(range(-1, 5), 'line2byte(v:val)')) - set fileformat& + bw! + set noendofline nofixendofline + normal a- + for ff in ["unix", "mac", "dos"] + let &fileformat = ff + call assert_equal(1, line2byte(1)) + call assert_equal(2, line2byte(2)) " line2byte(line("$") + 1) is the buffer size plus one (as per :help line2byte). + endfor + + set endofline& fixendofline& fileformat& bw! endfunc diff --git a/src/version.c b/src/version.c index 42a81ccfa8..d382ff316d 100644 --- a/src/version.c +++ b/src/version.c @@ -795,6 +795,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 303, +/**/ 302, /**/ 301, |