vi: don't overwrite existing file

If the name of the file being written doesn't match the current
filename and the output file already exists vi should issue a
warning and not overwrite the file.

Because the test only compares the file names it's somewhat over-
protective.  If the current file name is 'my_text' and the user tries
to save to './my_text' they'll be prevented from doing so.

function                                             old     new   delta
colon                                               3092    3151     +59
.rodata                                           105118  105146     +28
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 87/0)               Total: 87 bytes

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Ron Yorston 2021-03-28 13:18:40 +01:00 committed by Denys Vlasenko
parent 25d2592640
commit 5ae25f40bd

View File

@ -2816,6 +2816,13 @@ static void colon(char *buf)
// is there a file name to write to?
if (args[0]) {
struct stat statbuf;
if (!useforce && (fn == NULL || strcmp(fn, args) != 0) &&
stat(args, &statbuf) == 0) {
status_line_bold("File exists (:w! overrides)");
goto ret;
}
fn = args;
}
# if ENABLE_FEATURE_VI_READONLY