busybox: vi: backporting patches to fix ZZ and :x command
[openwrt/staging/noltari.git] / package / utils / busybox / patches / 402-vi-avoid-touching-a-new-file-with-ZZ-when-no-editing.patch
diff --git a/package/utils/busybox/patches/402-vi-avoid-touching-a-new-file-with-ZZ-when-no-editing.patch b/package/utils/busybox/patches/402-vi-avoid-touching-a-new-file-with-ZZ-when-no-editing.patch
new file mode 100644 (file)
index 0000000..b56cf73
--- /dev/null
@@ -0,0 +1,53 @@
+From 8f3bf4f0d3605b50a8e4c48c89aeabc455f04884 Mon Sep 17 00:00:00 2001
+From: Yousong Zhou <yszhou4tech@gmail.com>
+Date: Fri, 24 Mar 2017 21:13:10 +0100
+Subject: [PATCH 2/2] vi: avoid touching a new file with ZZ when no editing has
+ been done
+
+This is the behaviour observed with standard vim and busybox vi of at
+least 1.22.1.  It was changed with commit "32afd3a vi: some
+simplifications" which happened before 1.23.0.
+
+Mistyping filename on command line happens fairly often and it's better
+we restore the old behaviour to avoid a few unnecessary flash writes and
+sometimes efforts of debugging bugs caused by those unneeded stray
+files.
+
+Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
+Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
+---
+ editors/vi.c | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+--- a/editors/vi.c
++++ b/editors/vi.c
+@@ -719,14 +719,6 @@ static int init_text_buffer(char *fn)
+ {
+       int rc;
+-      flush_undo_data();
+-      modified_count = 0;
+-      last_modified_count = -1;
+-#if ENABLE_FEATURE_VI_YANKMARK
+-      /* init the marks */
+-      memset(mark, 0, sizeof(mark));
+-#endif
+-
+       /* allocate/reallocate text buffer */
+       free(text);
+       text_size = 10240;
+@@ -741,6 +733,14 @@ static int init_text_buffer(char *fn)
+               // file doesnt exist. Start empty buf with dummy line
+               char_insert(text, '\n', NO_UNDO);
+       }
++
++      flush_undo_data();
++      modified_count = 0;
++      last_modified_count = -1;
++#if ENABLE_FEATURE_VI_YANKMARK
++      /* init the marks */
++      memset(mark, 0, sizeof(mark));
++#endif
+       return rc;
+ }