diff options
author | erw7 <erw7.github@gmail.com> | 2017-04-09 12:31:54 +0900 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2017-04-11 00:39:12 +0200 |
commit | 4a63d9e5f88feb16ec513b8dba1f8d02bd2ff4d6 (patch) | |
tree | 40ae72d430c484d0e271fc939dd9c509835bb5f6 | |
parent | 2d296387447cbf89308a4a136cce866e4691cca8 (diff) | |
download | rneovim-4a63d9e5f88feb16ec513b8dba1f8d02bd2ff4d6.tar.gz rneovim-4a63d9e5f88feb16ec513b8dba1f8d02bd2ff4d6.tar.bz2 rneovim-4a63d9e5f88feb16ec513b8dba1f8d02bd2ff4d6.zip |
win: mch_open_rw: specify S_IWRITE #6487
On Windows, `mch_open_rw` is not actually doing what it claims. This
manifests as "E301: Oops, lost the swap file !!!" when filename is
changed with :file {name}.
Steps to reproduce (covered by test/functional/ex_cmds/file_spec.lua):
nvim -u NONE
:edit test
:file test2
E301 Oops, lost the swap file!!!
From libuv/src/win/fs.c:
void fs__open(uv_fs_t* req) {
...
attributes |= FILE_ATTRIBUTE_NORMAL;
if (flags & _O_CREAT) {
if (!((req->fs.info.mode & ~current_umask) & _S_IWRITE)) {
attributes |= FILE_ATTRIBUTE_READONLY;
}
}
-rw-r--r-- | src/nvim/macros.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/nvim/macros.h b/src/nvim/macros.h index 22fd48de9d..9131f8be84 100644 --- a/src/nvim/macros.h +++ b/src/nvim/macros.h @@ -120,8 +120,10 @@ /* mch_open_rw(): invoke os_open() with third argument for user R/W. */ #if defined(UNIX) /* open in rw------- mode */ # define mch_open_rw(n, f) os_open((n), (f), (mode_t)0600) +#elif defined(WIN32) +# define mch_open_rw(n, f) os_open((n), (f), S_IREAD | S_IWRITE) #else -# define mch_open_rw(n, f) os_open((n), (f), 0) +# define mch_open_rw(n, f) os_open((n), (f), 0) #endif # define REPLACE_NORMAL(s) (((s) & REPLACE_FLAG) && !((s) & VREPLACE_FLAG)) |