diff options
Diffstat (limited to 'data/vim/patches/8.1.1371')
-rw-r--r-- | data/vim/patches/8.1.1371 | 834 |
1 files changed, 834 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.1371 b/data/vim/patches/8.1.1371 new file mode 100644 index 000000000..3cc175f85 --- /dev/null +++ b/data/vim/patches/8.1.1371 @@ -0,0 +1,834 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.1371 +Fcc: outbox +From: Bram Moolenaar <Bram@moolenaar.net> +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 8.1.1371 +Problem: Cannot recover from a swap file. +Solution: Do not expand environment variables in the swap file name. + Do not check the extension when we already know a file is a swap + file. (Ken Takata, closes 4415, closes #4369) +Files: src/buffer.c, src/ex_cmds.c, src/ex_cmds2.c, src/ex_docmd.c, + src/gui.c, src/if_cscope.c, src/main.c, src/memline.c, + src/misc1.c, src/proto/memline.pro, src/proto/misc1.pro, + src/search.c, src/spell.c, src/spellfile.c, src/tag.c, + src/testdir/test_swap.vim, src/vim.h + + +*** ../vim-8.1.1370/src/buffer.c 2019-05-16 20:29:40.795834299 +0200 +--- src/buffer.c 2019-05-23 21:26:50.251337934 +0200 +*************** +*** 1071,1077 **** + + /* User selected Recover at ATTENTION prompt. */ + msg_scroll = TRUE; +! ml_recover(); + msg_puts("\n"); /* don't overwrite the last message */ + cmdline_row = msg_row; + do_modelines(0); +--- 1071,1077 ---- + + /* User selected Recover at ATTENTION prompt. */ + msg_scroll = TRUE; +! ml_recover(FALSE); + msg_puts("\n"); /* don't overwrite the last message */ + cmdline_row = msg_row; + do_modelines(0); +*************** +*** 4943,4949 **** + if (i < alist->al_ga.ga_len + && (AARGLIST(alist)[i].ae_fnum == buf->b_fnum + || fullpathcmp(alist_name(&AARGLIST(alist)[i]), +! buf->b_ffname, TRUE) & FPC_SAME)) + { + int weight = 1; + +--- 4943,4949 ---- + if (i < alist->al_ga.ga_len + && (AARGLIST(alist)[i].ae_fnum == buf->b_fnum + || fullpathcmp(alist_name(&AARGLIST(alist)[i]), +! buf->b_ffname, TRUE, TRUE) & FPC_SAME)) + { + int weight = 1; + +*** ../vim-8.1.1370/src/ex_cmds.c 2019-05-20 20:34:48.347791448 +0200 +--- src/ex_cmds.c 2019-05-23 21:26:50.251337934 +0200 +*************** +*** 7002,7008 **** + copy_option_part(&p, NameBuff, MAXPATHL, ","); + mustfree = FALSE; + rt = vim_getenv((char_u *)"VIMRUNTIME", &mustfree); +! if (rt != NULL && fullpathcmp(rt, NameBuff, FALSE) != FPC_SAME) + { + int fcount; + char_u **fnames; +--- 7002,7009 ---- + copy_option_part(&p, NameBuff, MAXPATHL, ","); + mustfree = FALSE; + rt = vim_getenv((char_u *)"VIMRUNTIME", &mustfree); +! if (rt != NULL && +! fullpathcmp(rt, NameBuff, FALSE, TRUE) != FPC_SAME) + { + int fcount; + char_u **fnames; +*************** +*** 7224,7230 **** + */ + ga_init2(&ga, (int)sizeof(char_u *), 100); + if (add_help_tags || fullpathcmp((char_u *)"$VIMRUNTIME/doc", +! dir, FALSE) == FPC_SAME) + { + if (ga_grow(&ga, 1) == FAIL) + got_int = TRUE; +--- 7225,7231 ---- + */ + ga_init2(&ga, (int)sizeof(char_u *), 100); + if (add_help_tags || fullpathcmp((char_u *)"$VIMRUNTIME/doc", +! dir, FALSE, TRUE) == FPC_SAME) + { + if (ga_grow(&ga, 1) == FAIL) + got_int = TRUE; +*** ../vim-8.1.1370/src/ex_cmds2.c 2019-05-21 20:54:42.078415244 +0200 +--- src/ex_cmds2.c 2019-05-23 21:26:50.255337904 +0200 +*************** +*** 1715,1721 **** + && (win->w_buffer->b_ffname == NULL + || !(fullpathcmp( + alist_name(&WARGLIST(win)[win->w_arg_idx]), +! win->w_buffer->b_ffname, TRUE) & FPC_SAME)))); + } + + /* +--- 1715,1721 ---- + && (win->w_buffer->b_ffname == NULL + || !(fullpathcmp( + alist_name(&WARGLIST(win)[win->w_arg_idx]), +! win->w_buffer->b_ffname, TRUE, TRUE) & FPC_SAME)))); + } + + /* +*************** +*** 1737,1743 **** + && (win->w_buffer->b_fnum == GARGLIST[GARGCOUNT - 1].ae_fnum + || (win->w_buffer->b_ffname != NULL + && (fullpathcmp(alist_name(&GARGLIST[GARGCOUNT - 1]), +! win->w_buffer->b_ffname, TRUE) & FPC_SAME)))) + arg_had_last = TRUE; + } + else +--- 1737,1743 ---- + && (win->w_buffer->b_fnum == GARGLIST[GARGCOUNT - 1].ae_fnum + || (win->w_buffer->b_ffname != NULL + && (fullpathcmp(alist_name(&GARGLIST[GARGCOUNT - 1]), +! win->w_buffer->b_ffname, TRUE, TRUE) & FPC_SAME)))) + arg_had_last = TRUE; + } + else +*** ../vim-8.1.1370/src/ex_docmd.c 2019-05-09 18:59:27.228463605 +0200 +--- src/ex_docmd.c 2019-05-23 21:26:50.255337904 +0200 +*************** +*** 6725,6731 **** + + && (*eap->arg == NUL + || setfname(curbuf, eap->arg, NULL, TRUE) == OK)) +! ml_recover(); + recoverymode = FALSE; + } + +--- 6725,6731 ---- + + && (*eap->arg == NUL + || setfname(curbuf, eap->arg, NULL, TRUE) == OK)) +! ml_recover(TRUE); + recoverymode = FALSE; + } + +*** ../vim-8.1.1370/src/gui.c 2019-05-09 14:14:37.090870887 +0200 +--- src/gui.c 2019-05-23 21:26:50.255337904 +0200 +*************** +*** 603,624 **** + #endif + + if ( fullpathcmp((char_u *)USR_GVIMRC_FILE, +! (char_u *)GVIMRC_FILE, FALSE) != FPC_SAME + #ifdef SYS_GVIMRC_FILE + && fullpathcmp((char_u *)SYS_GVIMRC_FILE, +! (char_u *)GVIMRC_FILE, FALSE) != FPC_SAME + #endif + #ifdef USR_GVIMRC_FILE2 + && fullpathcmp((char_u *)USR_GVIMRC_FILE2, +! (char_u *)GVIMRC_FILE, FALSE) != FPC_SAME + #endif + #ifdef USR_GVIMRC_FILE3 + && fullpathcmp((char_u *)USR_GVIMRC_FILE3, +! (char_u *)GVIMRC_FILE, FALSE) != FPC_SAME + #endif + #ifdef USR_GVIMRC_FILE4 + && fullpathcmp((char_u *)USR_GVIMRC_FILE4, +! (char_u *)GVIMRC_FILE, FALSE) != FPC_SAME + #endif + ) + do_source((char_u *)GVIMRC_FILE, TRUE, DOSO_GVIMRC); +--- 603,624 ---- + #endif + + if ( fullpathcmp((char_u *)USR_GVIMRC_FILE, +! (char_u *)GVIMRC_FILE, FALSE, TRUE) != FPC_SAME + #ifdef SYS_GVIMRC_FILE + && fullpathcmp((char_u *)SYS_GVIMRC_FILE, +! (char_u *)GVIMRC_FILE, FALSE, TRUE) != FPC_SAME + #endif + #ifdef USR_GVIMRC_FILE2 + && fullpathcmp((char_u *)USR_GVIMRC_FILE2, +! (char_u *)GVIMRC_FILE, FALSE, TRUE) != FPC_SAME + #endif + #ifdef USR_GVIMRC_FILE3 + && fullpathcmp((char_u *)USR_GVIMRC_FILE3, +! (char_u *)GVIMRC_FILE, FALSE, TRUE) != FPC_SAME + #endif + #ifdef USR_GVIMRC_FILE4 + && fullpathcmp((char_u *)USR_GVIMRC_FILE4, +! (char_u *)GVIMRC_FILE, FALSE, TRUE) != FPC_SAME + #endif + ) + do_source((char_u *)GVIMRC_FILE, TRUE, DOSO_GVIMRC); +*** ../vim-8.1.1370/src/if_cscope.c 2019-02-17 17:44:36.211875510 +0100 +--- src/if_cscope.c 2019-05-23 21:31:56.497321617 +0200 +*************** +*** 1401,1410 **** + #if defined(UNIX) + && csinfo[j].st_dev == sb->st_dev && csinfo[j].st_ino == sb->st_ino + #else +! /* compare pathnames first */ + && ((fullpathcmp((char_u *)csinfo[j].fname, +! (char_u *)fname, FALSE) & FPC_SAME) +! /* test index file attributes too */ + || (csinfo[j].nVolume == bhfi.dwVolumeSerialNumber + && csinfo[j].nIndexHigh == bhfi.nFileIndexHigh + && csinfo[j].nIndexLow == bhfi.nFileIndexLow)) +--- 1401,1410 ---- + #if defined(UNIX) + && csinfo[j].st_dev == sb->st_dev && csinfo[j].st_ino == sb->st_ino + #else +! // compare pathnames first + && ((fullpathcmp((char_u *)csinfo[j].fname, +! (char_u *)fname, FALSE, TRUE) & FPC_SAME) +! // test index file attributes too + || (csinfo[j].nVolume == bhfi.dwVolumeSerialNumber + && csinfo[j].nIndexHigh == bhfi.nFileIndexHigh + && csinfo[j].nIndexLow == bhfi.nFileIndexLow)) +*** ../vim-8.1.1370/src/main.c 2019-05-09 15:12:45.172723940 +0200 +--- src/main.c 2019-05-23 21:26:50.255337904 +0200 +*************** +*** 2684,2690 **** + if (recoverymode) /* do recover */ + { + msg_scroll = TRUE; /* scroll message up */ +! ml_recover(); + if (curbuf->b_ml.ml_mfp == NULL) /* failed */ + getout(1); + do_modelines(0); /* do modelines */ +--- 2684,2690 ---- + if (recoverymode) /* do recover */ + { + msg_scroll = TRUE; /* scroll message up */ +! ml_recover(TRUE); + if (curbuf->b_ml.ml_mfp == NULL) /* failed */ + getout(1); + do_modelines(0); /* do modelines */ +*************** +*** 3101,3118 **** + + i = FAIL; + if (fullpathcmp((char_u *)USR_VIMRC_FILE, +! (char_u *)VIMRC_FILE, FALSE) != FPC_SAME + #ifdef USR_VIMRC_FILE2 + && fullpathcmp((char_u *)USR_VIMRC_FILE2, +! (char_u *)VIMRC_FILE, FALSE) != FPC_SAME + #endif + #ifdef USR_VIMRC_FILE3 + && fullpathcmp((char_u *)USR_VIMRC_FILE3, +! (char_u *)VIMRC_FILE, FALSE) != FPC_SAME + #endif + #ifdef SYS_VIMRC_FILE + && fullpathcmp((char_u *)SYS_VIMRC_FILE, +! (char_u *)VIMRC_FILE, FALSE) != FPC_SAME + #endif + ) + i = do_source((char_u *)VIMRC_FILE, TRUE, DOSO_VIMRC); +--- 3101,3118 ---- + + i = FAIL; + if (fullpathcmp((char_u *)USR_VIMRC_FILE, +! (char_u *)VIMRC_FILE, FALSE, TRUE) != FPC_SAME + #ifdef USR_VIMRC_FILE2 + && fullpathcmp((char_u *)USR_VIMRC_FILE2, +! (char_u *)VIMRC_FILE, FALSE, TRUE) != FPC_SAME + #endif + #ifdef USR_VIMRC_FILE3 + && fullpathcmp((char_u *)USR_VIMRC_FILE3, +! (char_u *)VIMRC_FILE, FALSE, TRUE) != FPC_SAME + #endif + #ifdef SYS_VIMRC_FILE + && fullpathcmp((char_u *)SYS_VIMRC_FILE, +! (char_u *)VIMRC_FILE, FALSE, TRUE) != FPC_SAME + #endif + ) + i = do_source((char_u *)VIMRC_FILE, TRUE, DOSO_VIMRC); +*************** +*** 3127,3136 **** + secure = 0; + #endif + if ( fullpathcmp((char_u *)USR_EXRC_FILE, +! (char_u *)EXRC_FILE, FALSE) != FPC_SAME + #ifdef USR_EXRC_FILE2 + && fullpathcmp((char_u *)USR_EXRC_FILE2, +! (char_u *)EXRC_FILE, FALSE) != FPC_SAME + #endif + ) + (void)do_source((char_u *)EXRC_FILE, FALSE, DOSO_NONE); +--- 3127,3136 ---- + secure = 0; + #endif + if ( fullpathcmp((char_u *)USR_EXRC_FILE, +! (char_u *)EXRC_FILE, FALSE, TRUE) != FPC_SAME + #ifdef USR_EXRC_FILE2 + && fullpathcmp((char_u *)USR_EXRC_FILE2, +! (char_u *)EXRC_FILE, FALSE, TRUE) != FPC_SAME + #endif + ) + (void)do_source((char_u *)EXRC_FILE, FALSE, DOSO_NONE); +*** ../vim-8.1.1370/src/memline.c 2019-05-18 13:05:12.470334000 +0200 +--- src/memline.c 2019-05-23 21:31:48.537371741 +0200 +*************** +*** 1084,1092 **** + + /* + * Try to recover curbuf from the .swp file. + */ + void +! ml_recover(void) + { + buf_T *buf = NULL; + memfile_T *mfp = NULL; +--- 1084,1094 ---- + + /* + * Try to recover curbuf from the .swp file. ++ * If "checkext" is TRUE, check the extension and detect whether it is ++ * a swap file. + */ + void +! ml_recover(int checkext) + { + buf_T *buf = NULL; + memfile_T *mfp = NULL; +*************** +*** 1136,1142 **** + if (fname == NULL) /* When there is no file name */ + fname = (char_u *)""; + len = (int)STRLEN(fname); +! if (len >= 4 && + #if defined(VMS) + STRNICMP(fname + len - 4, "_s", 2) + #else +--- 1138,1144 ---- + if (fname == NULL) /* When there is no file name */ + fname = (char_u *)""; + len = (int)STRLEN(fname); +! if (checkext && len >= 4 && + #if defined(VMS) + STRNICMP(fname + len - 4, "_s", 2) + #else +*************** +*** 1887,1893 **** + if (num_names == 0) + num_files = 0; + else if (expand_wildcards(num_names, names, &num_files, &files, +! EW_KEEPALL|EW_FILE|EW_SILENT) == FAIL) + num_files = 0; + + /* +--- 1889,1895 ---- + if (num_names == 0) + num_files = 0; + else if (expand_wildcards(num_names, names, &num_files, &files, +! EW_NOTENV|EW_KEEPALL|EW_FILE|EW_SILENT) == FAIL) + num_files = 0; + + /* +*************** +*** 1930,1940 **** + && (p = curbuf->b_ml.ml_mfp->mf_fname) != NULL) + { + for (i = 0; i < num_files; ++i) +! if (fullpathcmp(p, files[i], TRUE) & FPC_SAME) + { +! /* Remove the name from files[i]. Move further entries +! * down. When the array becomes empty free it here, since +! * FreeWild() won't be called below. */ + vim_free(files[i]); + if (--num_files == 0) + vim_free(files); +--- 1932,1944 ---- + && (p = curbuf->b_ml.ml_mfp->mf_fname) != NULL) + { + for (i = 0; i < num_files; ++i) +! // Do not expand wildcards, on windows would try to expand +! // "%tmp%" in "%tmp%file". +! if (fullpathcmp(p, files[i], TRUE, FALSE) & FPC_SAME) + { +! // Remove the name from files[i]. Move further entries +! // down. When the array becomes empty free it here, since +! // FreeWild() won't be called below. + vim_free(files[i]); + if (--num_files == 0) + vim_free(files); +*** ../vim-8.1.1370/src/misc1.c 2019-05-19 22:53:36.508914587 +0200 +--- src/misc1.c 2019-05-23 21:26:50.255337904 +0200 +*************** +*** 2691,2703 **** + * FPC_DIFF if they both exist and are different files. + * FPC_NOTX if they both don't exist. + * FPC_DIFFX if one of them doesn't exist. +! * For the first name environment variables are expanded + */ + int + fullpathcmp( + char_u *s1, + char_u *s2, +! int checkname) /* when both don't exist, check file names */ + { + #ifdef UNIX + char_u exp1[MAXPATHL]; +--- 2691,2705 ---- + * FPC_DIFF if they both exist and are different files. + * FPC_NOTX if they both don't exist. + * FPC_DIFFX if one of them doesn't exist. +! * For the first name environment variables are expanded if "expandenv" is +! * TRUE. + */ + int + fullpathcmp( + char_u *s1, + char_u *s2, +! int checkname, // when both don't exist, check file names +! int expandenv) + { + #ifdef UNIX + char_u exp1[MAXPATHL]; +*************** +*** 2706,2712 **** + stat_T st1, st2; + int r1, r2; + +! expand_env(s1, exp1, MAXPATHL); + r1 = mch_stat((char *)exp1, &st1); + r2 = mch_stat((char *)s2, &st2); + if (r1 != 0 && r2 != 0) +--- 2708,2717 ---- + stat_T st1, st2; + int r1, r2; + +! if (expandenv) +! expand_env(s1, exp1, MAXPATHL); +! else +! vim_strncpy(exp1, s1, MAXPATHL - 1); + r1 = mch_stat((char *)exp1, &st1); + r2 = mch_stat((char *)s2, &st2); + if (r1 != 0 && r2 != 0) +*************** +*** 2741,2747 **** + full1 = exp1 + MAXPATHL; + full2 = full1 + MAXPATHL; + +! expand_env(s1, exp1, MAXPATHL); + r1 = vim_FullName(exp1, full1, MAXPATHL, FALSE); + r2 = vim_FullName(s2, full2, MAXPATHL, FALSE); + +--- 2746,2755 ---- + full1 = exp1 + MAXPATHL; + full2 = full1 + MAXPATHL; + +! if (expandenv) +! expand_env(s1, exp1, MAXPATHL); +! else +! vim_strncpy(exp1, s1, MAXPATHL - 1); + r1 = vim_FullName(exp1, full1, MAXPATHL, FALSE); + r2 = vim_FullName(s2, full2, MAXPATHL, FALSE); + +*************** +*** 4027,4033 **** + /* + * First expand environment variables, "~/" and "~user/". + */ +! if (has_env_var(p) || *p == '~') + { + p = expand_env_save_opt(p, TRUE); + if (p == NULL) +--- 4035,4041 ---- + /* + * First expand environment variables, "~/" and "~user/". + */ +! if ((has_env_var(p) && !(flags & EW_NOTENV)) || *p == '~') + { + p = expand_env_save_opt(p, TRUE); + if (p == NULL) +*** ../vim-8.1.1370/src/proto/memline.pro 2019-05-10 21:28:35.184612974 +0200 +--- src/proto/memline.pro 2019-05-23 21:26:50.255337904 +0200 +*************** +*** 9,15 **** + void ml_close_all(int del_file); + void ml_close_notmod(void); + void ml_timestamp(buf_T *buf); +! void ml_recover(void); + int recover_names(char_u *fname, int list, int nr, char_u **fname_out); + char_u *make_percent_swname(char_u *dir, char_u *name); + void get_b0_dict(char_u *fname, dict_T *d); +--- 9,15 ---- + void ml_close_all(int del_file); + void ml_close_notmod(void); + void ml_timestamp(buf_T *buf); +! void ml_recover(int checkext); + int recover_names(char_u *fname, int list, int nr, char_u **fname_out); + char_u *make_percent_swname(char_u *dir, char_u *name); + void get_b0_dict(char_u *fname, dict_T *d); +*** ../vim-8.1.1370/src/proto/misc1.pro 2019-05-11 17:03:55.170019762 +0200 +--- src/proto/misc1.pro 2019-05-23 21:26:50.255337904 +0200 +*************** +*** 45,51 **** + int match_user(char_u *name); + void home_replace(buf_T *buf, char_u *src, char_u *dst, int dstlen, int one); + char_u *home_replace_save(buf_T *buf, char_u *src); +! int fullpathcmp(char_u *s1, char_u *s2, int checkname); + char_u *gettail(char_u *fname); + char_u *gettail_sep(char_u *fname); + char_u *getnextcomp(char_u *fname); +--- 45,51 ---- + int match_user(char_u *name); + void home_replace(buf_T *buf, char_u *src, char_u *dst, int dstlen, int one); + char_u *home_replace_save(buf_T *buf, char_u *src); +! int fullpathcmp(char_u *s1, char_u *s2, int checkname, int expandenv); + char_u *gettail(char_u *fname); + char_u *gettail_sep(char_u *fname); + char_u *getnextcomp(char_u *fname); +*** ../vim-8.1.1370/src/search.c 2019-05-18 19:26:25.973151461 +0200 +--- src/search.c 2019-05-23 21:26:50.259337879 +0200 +*************** +*** 5170,5176 **** + i = old_files; + if (i == max_path_depth) + break; +! if (fullpathcmp(new_fname, files[i].name, TRUE) & FPC_SAME) + { + if (type != CHECK_PATH && + action == ACTION_SHOW_ALL && files[i].matched) +--- 5170,5177 ---- + i = old_files; + if (i == max_path_depth) + break; +! if (fullpathcmp(new_fname, files[i].name, TRUE, TRUE) +! & FPC_SAME) + { + if (type != CHECK_PATH && + action == ACTION_SHOW_ALL && files[i].matched) +*** ../vim-8.1.1370/src/spell.c 2019-05-09 15:12:45.176723907 +0200 +--- src/spell.c 2019-05-23 21:26:50.259337879 +0200 +*************** +*** 2343,2349 **** + + /* Check if we loaded this language before. */ + for (slang = first_lang; slang != NULL; slang = slang->sl_next) +! if (fullpathcmp(lang, slang->sl_fname, FALSE) == FPC_SAME) + break; + } + else +--- 2343,2349 ---- + + /* Check if we loaded this language before. */ + for (slang = first_lang; slang != NULL; slang = slang->sl_next) +! if (fullpathcmp(lang, slang->sl_fname, FALSE, TRUE) == FPC_SAME) + break; + } + else +*************** +*** 2395,2401 **** + * Loop over the languages, there can be several files for "lang". + */ + for (slang = first_lang; slang != NULL; slang = slang->sl_next) +! if (filename ? fullpathcmp(lang, slang->sl_fname, FALSE) == FPC_SAME + : STRICMP(lang, slang->sl_name) == 0) + { + region_mask = REGION_ALL; +--- 2395,2402 ---- + * Loop over the languages, there can be several files for "lang". + */ + for (slang = first_lang; slang != NULL; slang = slang->sl_next) +! if (filename ? fullpathcmp(lang, slang->sl_fname, FALSE, TRUE) +! == FPC_SAME + : STRICMP(lang, slang->sl_name) == 0) + { + region_mask = REGION_ALL; +*************** +*** 2463,2469 **** + for (c = 0; c < ga.ga_len; ++c) + { + p = LANGP_ENTRY(ga, c)->lp_slang->sl_fname; +! if (p != NULL && fullpathcmp(spf_name, p, FALSE) == FPC_SAME) + break; + } + if (c < ga.ga_len) +--- 2464,2471 ---- + for (c = 0; c < ga.ga_len; ++c) + { + p = LANGP_ENTRY(ga, c)->lp_slang->sl_fname; +! if (p != NULL && fullpathcmp(spf_name, p, FALSE, TRUE) +! == FPC_SAME) + break; + } + if (c < ga.ga_len) +*************** +*** 2472,2478 **** + + /* Check if it was loaded already. */ + for (slang = first_lang; slang != NULL; slang = slang->sl_next) +! if (fullpathcmp(spf_name, slang->sl_fname, FALSE) == FPC_SAME) + break; + if (slang == NULL) + { +--- 2474,2481 ---- + + /* Check if it was loaded already. */ + for (slang = first_lang; slang != NULL; slang = slang->sl_next) +! if (fullpathcmp(spf_name, slang->sl_fname, FALSE, TRUE) +! == FPC_SAME) + break; + if (slang == NULL) + { +*** ../vim-8.1.1370/src/spellfile.c 2019-05-09 15:12:45.176723907 +0200 +--- src/spellfile.c 2019-05-23 21:26:50.259337879 +0200 +*************** +*** 1734,1740 **** + + for (slang = first_lang; slang != NULL; slang = slang->sl_next) + { +! if (fullpathcmp(fname, slang->sl_fname, FALSE) == FPC_SAME) + { + slang_clear(slang); + if (spell_load_file(fname, NULL, slang, FALSE) == NULL) +--- 1734,1740 ---- + + for (slang = first_lang; slang != NULL; slang = slang->sl_next) + { +! if (fullpathcmp(fname, slang->sl_fname, FALSE, TRUE) == FPC_SAME) + { + slang_clear(slang); + if (spell_load_file(fname, NULL, slang, FALSE) == NULL) +*************** +*** 5440,5446 **** + * It might have been done already by spell_reload_one(). + */ + for (slang = first_lang; slang != NULL; slang = slang->sl_next) +! if (fullpathcmp(wfname, slang->sl_fname, FALSE) == FPC_SAME) + break; + if (slang == NULL) + { +--- 5440,5446 ---- + * It might have been done already by spell_reload_one(). + */ + for (slang = first_lang; slang != NULL; slang = slang->sl_next) +! if (fullpathcmp(wfname, slang->sl_fname, FALSE, TRUE) == FPC_SAME) + break; + if (slang == NULL) + { +*** ../vim-8.1.1370/src/tag.c 2019-05-03 23:15:34.048180407 +0200 +--- src/tag.c 2019-05-23 21:26:50.259337879 +0200 +*************** +*** 3781,3787 **** + fullname = expand_tag_fname(fname, tag_fname, TRUE); + if (fullname != NULL) + { +! retval = (fullpathcmp(fullname, buf_ffname, TRUE) & FPC_SAME); + vim_free(fullname); + } + #ifdef FEAT_EMACS_TAGS +--- 3781,3787 ---- + fullname = expand_tag_fname(fname, tag_fname, TRUE); + if (fullname != NULL) + { +! retval = (fullpathcmp(fullname, buf_ffname, TRUE, TRUE) & FPC_SAME); + vim_free(fullname); + } + #ifdef FEAT_EMACS_TAGS +*** ../vim-8.1.1370/src/testdir/test_swap.vim 2019-04-28 23:07:13.572480525 +0200 +--- src/testdir/test_swap.vim 2019-05-23 21:26:50.259337879 +0200 +*************** +*** 220,222 **** +--- 220,306 ---- + augroup END + augroup! test_swapfile_delete + endfunc ++ ++ func Test_swap_recover() ++ autocmd! SwapExists ++ augroup test_swap_recover ++ autocmd! ++ autocmd SwapExists * let v:swapchoice = 'r' ++ augroup END ++ ++ ++ call mkdir('Xswap') ++ let $Xswap = 'foo' " Check for issue #4369. ++ set dir=Xswap// ++ " Create a valid swapfile by editing a file. ++ split Xswap/text ++ call setline(1, ['one', 'two', 'three']) ++ write " file is written, not modified ++ " read the swapfile as a Blob ++ let swapfile_name = swapname('%') ++ let swapfile_bytes = readfile(swapfile_name, 'B') ++ ++ " Close the file and recreate the swap file. ++ quit ++ call writefile(swapfile_bytes, swapfile_name) ++ " Edit the file again. This triggers recovery. ++ try ++ split Xswap/text ++ catch ++ " E308 should be caught, not E305. ++ call assert_exception('E308:') " Original file may have been changed ++ endtry ++ " The file should be recovered. ++ call assert_equal(['one', 'two', 'three'], getline(1, 3)) ++ quit! ++ ++ call delete('Xswap/text') ++ call delete(swapfile_name) ++ call delete('Xswap', 'd') ++ unlet $Xswap ++ set dir& ++ augroup test_swap_recover ++ autocmd! ++ augroup END ++ augroup! test_swap_recover ++ endfunc ++ ++ func Test_swap_recover_ext() ++ autocmd! SwapExists ++ augroup test_swap_recover_ext ++ autocmd! ++ autocmd SwapExists * let v:swapchoice = 'r' ++ augroup END ++ ++ ++ " Create a valid swapfile by editing a file with a special extension. ++ split Xtest.scr ++ call setline(1, ['one', 'two', 'three']) ++ write " file is written, not modified ++ write " write again to make sure the swapfile is created ++ " read the swapfile as a Blob ++ let swapfile_name = swapname('%') ++ let swapfile_bytes = readfile(swapfile_name, 'B') ++ ++ " Close and delete the file and recreate the swap file. ++ quit ++ call delete('Xtest.scr') ++ call writefile(swapfile_bytes, swapfile_name) ++ " Edit the file again. This triggers recovery. ++ try ++ split Xtest.scr ++ catch ++ " E308 should be caught, not E306. ++ call assert_exception('E308:') " Original file may have been changed ++ endtry ++ " The file should be recovered. ++ call assert_equal(['one', 'two', 'three'], getline(1, 3)) ++ quit! ++ ++ call delete('Xtest.scr') ++ call delete(swapfile_name) ++ augroup test_swap_recover_ext ++ autocmd! ++ augroup END ++ augroup! test_swap_recover_ext ++ endfunc +*** ../vim-8.1.1370/src/vim.h 2019-05-19 22:53:36.504914607 +0200 +--- src/vim.h 2019-05-23 21:34:16.148457017 +0200 +*************** +*** 781,806 **** + #define WILD_ICASE 0x100 + #define WILD_ALLLINKS 0x200 + +! /* Flags for expand_wildcards() */ +! #define EW_DIR 0x01 /* include directory names */ +! #define EW_FILE 0x02 /* include file names */ +! #define EW_NOTFOUND 0x04 /* include not found names */ +! #define EW_ADDSLASH 0x08 /* append slash to directory name */ +! #define EW_KEEPALL 0x10 /* keep all matches */ +! #define EW_SILENT 0x20 /* don't print "1 returned" from shell */ +! #define EW_EXEC 0x40 /* executable files */ +! #define EW_PATH 0x80 /* search in 'path' too */ +! #define EW_ICASE 0x100 /* ignore case */ +! #define EW_NOERROR 0x200 /* no error for bad regexp */ +! #define EW_NOTWILD 0x400 /* add match with literal name if exists */ +! #define EW_KEEPDOLLAR 0x800 /* do not escape $, $var is expanded */ +! /* Note: mostly EW_NOTFOUND and EW_SILENT are mutually exclusive: EW_NOTFOUND +! * is used when executing commands and EW_SILENT for interactive expanding. */ +! #define EW_ALLLINKS 0x1000 /* also links not pointing to existing file */ +! #define EW_SHELLCMD 0x2000 /* called from expand_shellcmd(), don't check +! * if executable is in $PATH */ +! #define EW_DODOT 0x4000 /* also files starting with a dot */ +! #define EW_EMPTYOK 0x8000 /* no matches is not an error */ + + /* Flags for find_file_*() functions. */ + #define FINDFILE_FILE 0 /* only files */ +--- 781,807 ---- + #define WILD_ICASE 0x100 + #define WILD_ALLLINKS 0x200 + +! // Flags for expand_wildcards() +! #define EW_DIR 0x01 // include directory names +! #define EW_FILE 0x02 // include file names +! #define EW_NOTFOUND 0x04 // include not found names +! #define EW_ADDSLASH 0x08 // append slash to directory name +! #define EW_KEEPALL 0x10 // keep all matches +! #define EW_SILENT 0x20 // don't print "1 returned" from shell +! #define EW_EXEC 0x40 // executable files +! #define EW_PATH 0x80 // search in 'path' too +! #define EW_ICASE 0x100 // ignore case +! #define EW_NOERROR 0x200 // no error for bad regexp +! #define EW_NOTWILD 0x400 // add match with literal name if exists +! #define EW_KEEPDOLLAR 0x800 // do not escape $, $var is expanded +! // Note: mostly EW_NOTFOUND and EW_SILENT are mutually exclusive: EW_NOTFOUND +! // is used when executing commands and EW_SILENT for interactive expanding. +! #define EW_ALLLINKS 0x1000 // also links not pointing to existing file +! #define EW_SHELLCMD 0x2000 // called from expand_shellcmd(), don't check +! // if executable is in $PATH +! #define EW_DODOT 0x4000 // also files starting with a dot +! #define EW_EMPTYOK 0x8000 // no matches is not an error +! #define EW_NOTENV 0x10000 // do not expand environment variables + + /* Flags for find_file_*() functions. */ + #define FINDFILE_FILE 0 /* only files */ +*** ../vim-8.1.1370/src/version.c 2019-05-23 20:41:54.040417792 +0200 +--- src/version.c 2019-05-23 21:29:17.694342363 +0200 +*************** +*** 769,770 **** +--- 769,772 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 1371, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +26. You check your mail. It says "no new messages." So you check it again. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |