summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRon Yorston2014-11-30 20:39:53 +0000
committerDenys Vlasenko2015-01-07 18:23:29 +0100
commit70f4320b40b7af83525cebabab2bc437a22c41d2 (patch)
tree90b0523a24a7ba3e92f2f2df6940d24db4dca0d9
parente5213cee3833a88397cb5e73428efb9a1b886db3 (diff)
downloadbusybox-70f4320b40b7af83525cebabab2bc437a22c41d2.zip
busybox-70f4320b40b7af83525cebabab2bc437a22c41d2.tar.gz
vi: fix reading of file after last line
If the :r command is used to read a file after the last line of the buffer the last line of the buffer and the first line of the file are joined. An extra blank line appears at the end of the buffer. file 1 file 1 file 1file 2 file 2 file 2 ~ ~ The insertion point is normally at the start of the line following the specified line. When the specified line is the last one the next_line function baulks at moving to the non-existent following line. Signed-off-by: Ron Yorston <rmy@tigress.co.uk> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--editors/vi.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/editors/vi.c b/editors/vi.c
index 7b88e8e..77535be 100644
--- a/editors/vi.c
+++ b/editors/vi.c
@@ -1318,8 +1318,12 @@ static void colon(char *buf)
q = begin_line(dot); // assume "dot"
}
// read after current line- unless user said ":0r foo"
- if (b != 0)
+ if (b != 0) {
q = next_line(q);
+ // read after last line
+ if (q == end-1)
+ ++q;
+ }
{ // dance around potentially-reallocated text[]
uintptr_t ofs = q - text;
size = file_insert(fn, q, 0);