Mercurial > vim
changeset 1942:fe26299d6f70 v7.2.239
updated for version 7.2-239
author | vimboss |
---|---|
date | Wed, 22 Jul 2009 14:23:13 +0000 |
parents | d92358c7d621 |
children | 96276cc11d8e |
files | src/diff.c src/version.c |
diffstat | 2 files changed, 37 insertions(+), 27 deletions(-) [+] |
line wrap: on
line diff
--- a/src/diff.c +++ b/src/diff.c @@ -893,6 +893,7 @@ ex_diffpatch(eap) char_u *browseFile = NULL; int browse_flag = cmdmod.browse; #endif + struct stat st; #ifdef FEAT_BROWSE if (cmdmod.browse) @@ -999,44 +1000,51 @@ ex_diffpatch(eap) STRCAT(buf, ".rej"); mch_remove(buf); - if (curbuf->b_fname != NULL) + /* Only continue if the output file was created. */ + if (mch_stat((char *)tmp_new, &st) < 0 || st.st_size == 0) + EMSG(_("E816: Cannot read patch output")); + else { - newname = vim_strnsave(curbuf->b_fname, + if (curbuf->b_fname != NULL) + { + newname = vim_strnsave(curbuf->b_fname, (int)(STRLEN(curbuf->b_fname) + 4)); - if (newname != NULL) - STRCAT(newname, ".new"); - } + if (newname != NULL) + STRCAT(newname, ".new"); + } #ifdef FEAT_GUI - need_mouse_correct = TRUE; + need_mouse_correct = TRUE; #endif - /* don't use a new tab page, each tab page has its own diffs */ - cmdmod.tab = 0; + /* don't use a new tab page, each tab page has its own diffs */ + cmdmod.tab = 0; - if (win_split(0, (diff_flags & DIFF_VERTICAL) ? WSP_VERT : 0) != FAIL) - { - /* Pretend it was a ":split fname" command */ - eap->cmdidx = CMD_split; - eap->arg = tmp_new; - do_exedit(eap, old_curwin); + if (win_split(0, (diff_flags & DIFF_VERTICAL) ? WSP_VERT : 0) != FAIL) + { + /* Pretend it was a ":split fname" command */ + eap->cmdidx = CMD_split; + eap->arg = tmp_new; + do_exedit(eap, old_curwin); - if (curwin != old_curwin) /* split must have worked */ - { - /* Set 'diff', 'scrollbind' on and 'wrap' off. */ - diff_win_options(curwin, TRUE); - diff_win_options(old_curwin, TRUE); + /* check that split worked and editing tmp_new */ + if (curwin != old_curwin && win_valid(old_curwin)) + { + /* Set 'diff', 'scrollbind' on and 'wrap' off. */ + diff_win_options(curwin, TRUE); + diff_win_options(old_curwin, TRUE); - if (newname != NULL) - { - /* do a ":file filename.new" on the patched buffer */ - eap->arg = newname; - ex_file(eap); + if (newname != NULL) + { + /* do a ":file filename.new" on the patched buffer */ + eap->arg = newname; + ex_file(eap); #ifdef FEAT_AUTOCMD - /* Do filetype detection with the new name. */ - if (au_has_group((char_u *)"filetypedetect")) - do_cmdline_cmd((char_u *)":doau filetypedetect BufRead"); + /* Do filetype detection with the new name. */ + if (au_has_group((char_u *)"filetypedetect")) + do_cmdline_cmd((char_u *)":doau filetypedetect BufRead"); #endif + } } } }