aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/fileio.c
diff options
context:
space:
mode:
authorJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2020-10-05 20:28:55 -0400
committerGitHub <noreply@github.com>2020-10-05 20:28:55 -0400
commitc76fc7942b3a88b90c6f0bc7fafabe1f55c7814e (patch)
treef190580228fad6bd38c98b1baec051871b448b57 /src/nvim/fileio.c
parente3afb30e69cc310f9f5ab776d33dc7acaf428981 (diff)
parent0f078bdde8aea9424281206ea96b4626ce6ff944 (diff)
downloadrneovim-c76fc7942b3a88b90c6f0bc7fafabe1f55c7814e.tar.gz
rneovim-c76fc7942b3a88b90c6f0bc7fafabe1f55c7814e.tar.bz2
rneovim-c76fc7942b3a88b90c6f0bc7fafabe1f55c7814e.zip
Merge pull request #13040 from Shougo/vim-8.2.1793
[RDY] vim-patch:8.2.1793: not consistently giving the "is a directory" warning
Diffstat (limited to 'src/nvim/fileio.c')
-rw-r--r--src/nvim/fileio.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/nvim/fileio.c b/src/nvim/fileio.c
index ed8b72e2be..521d5c9deb 100644
--- a/src/nvim/fileio.c
+++ b/src/nvim/fileio.c
@@ -350,6 +350,7 @@ readfile(
char_u *old_b_fname;
int using_b_ffname;
int using_b_fname;
+ static char *msg_is_a_directory = N_("is a directory");
au_did_filetype = false; // reset before triggering any autocommands
@@ -444,16 +445,27 @@ readfile(
else
msg_scroll = TRUE; /* don't overwrite previous file message */
- /*
- * If the name is too long we might crash further on, quit here.
- */
+ // If the name is too long we might crash further on, quit here.
if (fname != NULL && *fname != NUL) {
- if (STRLEN(fname) >= MAXPATHL) {
+ size_t namelen = STRLEN(fname);
+
+ // If the name is too long we might crash further on, quit here.
+ if (namelen >= MAXPATHL) {
filemess(curbuf, fname, (char_u *)_("Illegal file name"), 0);
msg_end();
msg_scroll = msg_save;
return FAIL;
}
+
+ // If the name ends in a path separator, we can't open it. Check here,
+ // because reading the file may actually work, but then creating the
+ // swap file may destroy it! Reported on MS-DOS and Win 95.
+ if (after_pathsep((const char *)fname, (const char *)(fname + namelen))) {
+ filemess(curbuf, fname, (char_u *)_(msg_is_a_directory), 0);
+ msg_end();
+ msg_scroll = msg_save;
+ return FAIL;
+ }
}
if (!read_buffer && !read_stdin && !read_fifo) {
@@ -474,7 +486,7 @@ readfile(
# endif
) {
if (S_ISDIR(perm)) {
- filemess(curbuf, fname, (char_u *)_("is a directory"), 0);
+ filemess(curbuf, fname, (char_u *)_(msg_is_a_directory), 0);
} else {
filemess(curbuf, fname, (char_u *)_("is not a file"), 0);
}
@@ -544,7 +556,7 @@ readfile(
#ifndef UNIX
// On non-unix systems we can't open a directory, check here.
if (os_isdir(fname)) {
- filemess(curbuf, sfname, (char_u *)_("is a directory"), 0);
+ filemess(curbuf, sfname, (char_u *)_(msg_is_a_directory), 0);
curbuf->b_p_ro = true; // must use "w!" now
} else {
#endif