changeset 1069:f628d19361d9 v7.0.195

updated for version 7.0-195
author vimboss
date Tue, 13 Feb 2007 05:19:30 +0000
parents efd0ce477ae7
children 32c1b275ba64
files src/ex_cmds2.c src/version.c
diffstat 2 files changed, 16 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -1242,14 +1242,22 @@ autowrite(buf, forceit)
     buf_T	*buf;
     int		forceit;
 {
+    int		r;
+
     if (!(p_aw || p_awa) || !p_write
 #ifdef FEAT_QUICKFIX
-	/* never autowrite a "nofile" or "nowrite" buffer */
-	|| bt_dontwrite(buf)
+	    /* never autowrite a "nofile" or "nowrite" buffer */
+	    || bt_dontwrite(buf)
 #endif
-	|| (!forceit && buf->b_p_ro) || buf->b_ffname == NULL)
+	    || (!forceit && buf->b_p_ro) || buf->b_ffname == NULL)
 	return FAIL;
-    return buf_write_all(buf, forceit);
+    r = buf_write_all(buf, forceit);
+
+    /* Writing may succeed but the buffer still changed, e.g., when there is a
+     * conversion error.  We do want to return FAIL then. */
+    if (buf_valid(buf) && bufIsChanged(buf))
+	r = FAIL;
+    return r;
 }
 
 /*
@@ -1472,6 +1480,8 @@ check_changed_any(hidden)
 	if (buf == NULL)    /* No buffers changed */
 	    return FALSE;
 
+	/* Try auto-writing the buffer.  If this fails but the buffer no
+	 * longer exists it's not changed, that's OK. */
 	if (check_changed(buf, p_awa, TRUE, FALSE, TRUE) && buf_valid(buf))
 	    break;	    /* didn't save - still changes */
     }
--- a/src/version.c
+++ b/src/version.c
@@ -667,6 +667,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    195,
+/**/
     194,
 /**/
     193,