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 #8205)
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index 06109d5..e1497a5 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -1856,6 +1856,19 @@
 	(void)do_write(eap);
 }
 
+#ifdef UNIX
+    static int
+check_writable(char_u *fname)
+{
+    if (mch_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
@@ -1942,7 +1955,11 @@
 #ifdef FEAT_QUICKFIX
 		bt_dontwrite_msg(curbuf) ||
 #endif
-		check_fname() == FAIL || check_readonly(&eap->forceit, curbuf)))
+		check_fname() == FAIL
+#ifdef UNIX
+		|| check_writable(curbuf->b_ffname) == FAIL
+#endif
+		|| check_readonly(&eap->forceit, curbuf)))
 	goto theend;
 
     if (!other)