]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
updated for version 7.3.507 v7.3.507
authorBram Moolenaar <Bram@vim.org>
Wed, 25 Apr 2012 15:32:18 +0000 (17:32 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 25 Apr 2012 15:32:18 +0000 (17:32 +0200)
Problem:    When exiting with unsaved changes, selecting an existing file in
            the file dialog, there is no dialog to ask whether the existing
            file should be overwritten. (Felipe G. Nievinski)
Solution:   Call check_overwrite() before writing. (Christian Brabandt)

src/ex_cmds.c
src/ex_cmds2.c
src/proto/ex_cmds.pro
src/version.c

index 005f28f783c1a8c53df690c22f45f52ee1c437b5..d719826bcb10d59724e98fc333ff141a81cbcfaa 100644 (file)
@@ -25,7 +25,6 @@ static int viminfo_encoding __ARGS((vir_T *virp));
 static int read_viminfo_up_to_marks __ARGS((vir_T *virp, int forceit, int writing));
 #endif
 
-static int check_overwrite __ARGS((exarg_T *eap, buf_T *buf, char_u *fname, char_u *ffname, int other));
 static int check_readonly __ARGS((int *forceit, buf_T *buf));
 #ifdef FEAT_AUTOCMD
 static void delbuf_msg __ARGS((char_u *name));
@@ -2722,7 +2721,7 @@ theend:
  * May set eap->forceit if a dialog says it's OK to overwrite.
  * Return OK if it's OK, FAIL if it is not.
  */
-    static int
+    int
 check_overwrite(eap, buf, fname, ffname, other)
     exarg_T    *eap;
     buf_T      *buf;
index 2bce6dfdc1c99dee0e28ff6dc6290b87b3e26ecd..611a363392844c858c8ba25c2aa7413afd21f8c4 100644 (file)
@@ -1489,6 +1489,7 @@ dialog_changed(buf, checkall)
     char_u     buff[DIALOG_MSG_SIZE];
     int                ret;
     buf_T      *buf2;
+    exarg_T     ea;
 
     dialog_msg(buff, _("Save changes to \"%s\"?"),
                        (buf->b_fname != NULL) ?
@@ -1498,13 +1499,19 @@ dialog_changed(buf, checkall)
     else
        ret = vim_dialog_yesnocancel(VIM_QUESTION, NULL, buff, 1);
 
+    /* Init ea pseudo-structure, this is needed for the check_overwrite()
+     * function. */
+    ea.append = ea.forceit = FALSE;
+
     if (ret == VIM_YES)
     {
 #ifdef FEAT_BROWSE
        /* May get file name, when there is none */
        browse_save_fname(buf);
 #endif
-       if (buf->b_fname != NULL)   /* didn't hit Cancel */
+       if (buf->b_fname != NULL && check_overwrite(&ea, buf,
+                                   buf->b_fname, buf->b_ffname, FALSE) == OK)
+           /* didn't hit Cancel */
            (void)buf_write_all(buf, FALSE);
     }
     else if (ret == VIM_NO)
@@ -1532,7 +1539,9 @@ dialog_changed(buf, checkall)
                /* May get file name, when there is none */
                browse_save_fname(buf2);
 #endif
-               if (buf2->b_fname != NULL)   /* didn't hit Cancel */
+               if (buf2->b_fname != NULL && check_overwrite(&ea, buf2,
+                                 buf2->b_fname, buf2->b_ffname, FALSE) == OK)
+                   /* didn't hit Cancel */
                    (void)buf_write_all(buf2, FALSE);
 #ifdef FEAT_AUTOCMD
                /* an autocommand may have deleted the buffer */
index ff868caee1195b0c9ccfda23b649c9b2035882b7..1669d791ad4943479694fd9f2cc937983280097c 100644 (file)
@@ -23,6 +23,7 @@ void ex_file __ARGS((exarg_T *eap));
 void ex_update __ARGS((exarg_T *eap));
 void ex_write __ARGS((exarg_T *eap));
 int do_write __ARGS((exarg_T *eap));
+int check_overwrite __ARGS((exarg_T *eap, buf_T *buf, char_u *fname, char_u *ffname, int other));
 void ex_wnext __ARGS((exarg_T *eap));
 void do_wqall __ARGS((exarg_T *eap));
 int not_writing __ARGS((void));
index 9f36e4cce7419ed3ad35be4b2796e8adadd10175..f4ef82523f7dd3ff29b8be29649254dd69f74b6d 100644 (file)
@@ -714,6 +714,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    507,
 /**/
     506,
 /**/