aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/ex_cmds.c
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-11-07 07:06:49 +0800
committerzeertzjq <zeertzjq@outlook.com>2022-11-07 07:33:59 +0800
commitbdf87efeb523aecffde7dbf3c17806f7ca98471f (patch)
treee0966cf863dc3caabd9061492c4a9985712e71f9 /src/nvim/ex_cmds.c
parentb0190f4543397d6f3485e1eb03f30f80e358c201 (diff)
downloadrneovim-bdf87efeb523aecffde7dbf3c17806f7ca98471f.tar.gz
rneovim-bdf87efeb523aecffde7dbf3c17806f7ca98471f.tar.bz2
rneovim-bdf87efeb523aecffde7dbf3c17806f7ca98471f.zip
vim-patch:8.2.2856: get readonly error for device that can't be written to
Problem: Get readonly error for device that can't be written to. Solution: Check for being able to write first. (closes vim/vim#8205) https://github.com/vim/vim/commit/50157ef1c2e36d8696e79fd688bdd08312196bc6 Co-authored-by: Bram Moolenaar <Bram@vim.org>
Diffstat (limited to 'src/nvim/ex_cmds.c')
-rw-r--r--src/nvim/ex_cmds.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c
index 89e6d47950..d3a4b6c282 100644
--- a/src/nvim/ex_cmds.c
+++ b/src/nvim/ex_cmds.c
@@ -1772,6 +1772,17 @@ void ex_write(exarg_T *eap)
}
}
+#ifdef UNIX
+static int check_writable(const char *fname)
+{
+ if (os_nodetype(fname) == NODE_OTHER) {
+ semsg(_("E503: \"%s\" is not a file or writable device"), fname);
+ return FAIL;
+ }
+ return OK;
+}
+#endif
+
/// write current buffer to file 'eap->arg'
/// if 'eap->append' is true, append to the file
///
@@ -1829,7 +1840,11 @@ int do_write(exarg_T *eap)
// Writing to the current file is not allowed in readonly mode
// and a file name is required.
// "nofile" and "nowrite" buffers cannot be written implicitly either.
- if (!other && (bt_dontwrite_msg(curbuf) || check_fname() == FAIL
+ if (!other && (bt_dontwrite_msg(curbuf)
+ || check_fname() == FAIL
+#ifdef UNIX
+ || check_writable(curbuf->b_ffname) == FAIL
+#endif
|| check_readonly(&eap->forceit, curbuf))) {
goto theend;
}