[git commit] vi: Ensure that the edit buffer ends in a newline

Denys Vlasenko vda.linux at googlemail.com
Thu Jul 11 15:52:18 UTC 2024


commit: https://git.busybox.net/busybox/commit/?id=05e5d6a38157cabc733fc30acf3646a099cf139c
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

Currently vi assumes that the edit buffer ends in a newline. This may
not be the case. For example:

  $ printf test > test
  $ vi test
  <press 'o'>

We fix this by inserting a newline to the end during initialization.

Signed-off-by: Petja Patjas <pp01415943 at gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 editors/vi.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/editors/vi.c b/editors/vi.c
index 3cc3d2a0b..34932f60c 100644
--- a/editors/vi.c
+++ b/editors/vi.c
@@ -2315,9 +2315,10 @@ static int init_text_buffer(char *fn)
 
 	update_filename(fn);
 	rc = file_insert(fn, text, 1);
-	if (rc < 0) {
-		// file doesnt exist. Start empty buf with dummy line
-		char_insert(text, '\n', NO_UNDO);
+	if (rc <= 0 || *(end - 1) != '\n') {
+		// file doesn't exist or doesn't end in a newline.
+		// insert a newline to the end
+		char_insert(end, '\n', NO_UNDO);
 	}
 
 	flush_undo_data();


More information about the busybox-cvs mailing list