]> granicus.if.org Git - vim/commitdiff
patch 7.4.1576 v7.4.1576
authorBram Moolenaar <Bram@vim.org>
Tue, 15 Mar 2016 17:23:55 +0000 (18:23 +0100)
committerBram Moolenaar <Bram@vim.org>
Tue, 15 Mar 2016 17:23:55 +0000 (18:23 +0100)
Problem:    Write error of viminfo file is not handled properly. (Christian
            Neukirchen)
Solution:   Check the return value of fclose(). (closes #682)

src/ex_cmds.c
src/version.c

index ae88cc69e869e9b3e66df2f2117b9a60f76b0d9e..8a763c9a9d2540adecf5ed185d43ee4933d6cc6c 100644 (file)
@@ -2065,26 +2065,30 @@ write_viminfo(char_u *file, int forceit)
     viminfo_errcnt = 0;
     do_viminfo(fp_in, fp_out, forceit ? 0 : (VIF_WANT_INFO | VIF_WANT_MARKS));
 
-    fclose(fp_out);        /* errors are ignored !? */
+    if (fclose(fp_out) == EOF)
+       ++viminfo_errcnt;
+
     if (fp_in != NULL)
     {
        fclose(fp_in);
 
        /* In case of an error keep the original viminfo file.  Otherwise
         * rename the newly written file.  Give an error if that fails. */
-       if (viminfo_errcnt == 0 && vim_rename(tempname, fname) == -1)
+       if (viminfo_errcnt == 0)
        {
-           ++viminfo_errcnt;
-           EMSG2(_("E886: Can't rename viminfo file to %s!"), fname);
+           if (vim_rename(tempname, fname) == -1)
+           {
+               ++viminfo_errcnt;
+               EMSG2(_("E886: Can't rename viminfo file to %s!"), fname);
+           }
+# ifdef WIN3264
+           /* If the viminfo file was hidden then also hide the new file. */
+           else if (hidden)
+               mch_hide(fname);
+# endif
        }
        if (viminfo_errcnt > 0)
            mch_remove(tempname);
-
-#ifdef WIN3264
-       /* If the viminfo file was hidden then also hide the new file. */
-       if (hidden)
-           mch_hide(fname);
-#endif
     }
 
 end:
index 4ac46b05d7ed3f818ee9bf7d6b7a3e5033e8c809..5cc53c8a78bfecb2fd0dde14cf24368381b74997 100644 (file)
@@ -743,6 +743,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1576,
 /**/
     1575,
 /**/