diff options
author | Sam Bingner <sam@bingner.com> | 2019-06-05 22:02:50 -1000 |
---|---|---|
committer | Sam Bingner <sam@bingner.com> | 2019-06-05 22:02:50 -1000 |
commit | a255618e22152ca2e5fd361a3d0762e9db20dd80 (patch) | |
tree | 5c98f76c0de0785b8d5b58ac622da34f0d024a8f /data/vim/patches/8.1.1413 | |
parent | 1b1fa61507a809a66f053a8523f883b2b6a2f487 (diff) |
Update vim to 8.1.1471
Diffstat (limited to 'data/vim/patches/8.1.1413')
-rw-r--r-- | data/vim/patches/8.1.1413 | 290 |
1 files changed, 290 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.1413 b/data/vim/patches/8.1.1413 new file mode 100644 index 000000000..6b3de1b7d --- /dev/null +++ b/data/vim/patches/8.1.1413 @@ -0,0 +1,290 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.1413 +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.1413 +Problem: Error when the drive of the swap file was disconnected. +Solution: Try closing and re-opening the swap file. (closes #4378) +Files: src/memfile.c, src/structs.h, src/testdir/test_startup.vim + + +*** ../vim-8.1.1412/src/memfile.c 2019-05-24 18:48:36.766128461 +0200 +--- src/memfile.c 2019-05-27 23:27:40.760156972 +0200 +*************** +*** 994,1000 **** + unsigned page_count; /* number of pages written */ + unsigned size; /* number of bytes written */ + +! if (mfp->mf_fd < 0) /* there is no file, can't write */ + return FAIL; + + if (hp->bh_bnum < 0) /* must assign file block number */ +--- 994,1001 ---- + unsigned page_count; /* number of pages written */ + unsigned size; /* number of bytes written */ + +! if (mfp->mf_fd < 0 && !mfp->mf_reopen) +! // there is no file and there was no file, can't write + return FAIL; + + if (hp->bh_bnum < 0) /* must assign file block number */ +*************** +*** 1011,1016 **** +--- 1012,1019 ---- + */ + for (;;) + { ++ int attempt; ++ + nr = hp->bh_bnum; + if (nr > mfp->mf_infile_count) /* beyond end of file */ + { +*************** +*** 1021,1049 **** + hp2 = hp; + + offset = (off_T)page_size * nr; +- if (vim_lseek(mfp->mf_fd, offset, SEEK_SET) != offset) +- { +- PERROR(_("E296: Seek error in swap file write")); +- return FAIL; +- } + if (hp2 == NULL) /* freed block, fill with dummy data */ + page_count = 1; + else + page_count = hp2->bh_page_count; + size = page_size * page_count; +! if (mf_write_block(mfp, hp2 == NULL ? hp : hp2, offset, size) == FAIL) + { +! /* +! * Avoid repeating the error message, this mostly happens when the +! * disk is full. We give the message again only after a successful +! * write or when hitting a key. We keep on trying, in case some +! * space becomes available. +! */ +! if (!did_swapwrite_msg) +! emsg(_("E297: Write error in swap file")); +! did_swapwrite_msg = TRUE; +! return FAIL; + } + did_swapwrite_msg = FALSE; + if (hp2 != NULL) /* written a non-dummy block */ + hp2->bh_flags &= ~BH_DIRTY; +--- 1024,1072 ---- + hp2 = hp; + + offset = (off_T)page_size * nr; + if (hp2 == NULL) /* freed block, fill with dummy data */ + page_count = 1; + else + page_count = hp2->bh_page_count; + size = page_size * page_count; +! +! for (attempt = 1; attempt <= 2; ++attempt) + { +! if (mfp->mf_fd >= 0) +! { +! if (vim_lseek(mfp->mf_fd, offset, SEEK_SET) != offset) +! { +! PERROR(_("E296: Seek error in swap file write")); +! return FAIL; +! } +! if (mf_write_block(mfp, +! hp2 == NULL ? hp : hp2, offset, size) == OK) +! break; +! } +! +! if (attempt == 1) +! { +! // If the swap file is on a network drive, and the network +! // gets disconnected and then re-connected, we can maybe fix it +! // by closing and then re-opening the file. +! if (mfp->mf_fd >= 0) +! close(mfp->mf_fd); +! mfp->mf_fd = mch_open_rw((char *)mfp->mf_fname, mfp->mf_flags); +! mfp->mf_reopen = (mfp->mf_fd < 0); +! } +! if (attempt == 2 || mfp->mf_fd < 0) +! { +! // Avoid repeating the error message, this mostly happens when +! // the disk is full. We give the message again only after a +! // successful write or when hitting a key. We keep on trying, +! // in case some space becomes available. +! if (!did_swapwrite_msg) +! emsg(_("E297: Write error in swap file")); +! did_swapwrite_msg = TRUE; +! return FAIL; +! } + } ++ + did_swapwrite_msg = FALSE; + if (hp2 != NULL) /* written a non-dummy block */ + hp2->bh_flags &= ~BH_DIRTY; +*************** +*** 1271,1276 **** +--- 1294,1300 ---- + * the file) */ + flags |= O_NOINHERIT; + #endif ++ mfp->mf_flags = flags; + mfp->mf_fd = mch_open_rw((char *)mfp->mf_fname, flags); + } + +*** ../vim-8.1.1412/src/structs.h 2019-05-27 21:53:53.990229301 +0200 +--- src/structs.h 2019-05-27 23:22:20.062819685 +0200 +*************** +*** 604,631 **** + + struct memfile + { +! char_u *mf_fname; /* name of the file */ +! char_u *mf_ffname; /* idem, full path */ +! int mf_fd; /* file descriptor */ +! bhdr_T *mf_free_first; /* first block_hdr in free list */ +! bhdr_T *mf_used_first; /* mru block_hdr in used list */ +! bhdr_T *mf_used_last; /* lru block_hdr in used list */ +! unsigned mf_used_count; /* number of pages in used list */ +! unsigned mf_used_count_max; /* maximum number of pages in memory */ +! mf_hashtab_T mf_hash; /* hash lists */ +! mf_hashtab_T mf_trans; /* trans lists */ +! blocknr_T mf_blocknr_max; /* highest positive block number + 1*/ +! blocknr_T mf_blocknr_min; /* lowest negative block number - 1 */ +! blocknr_T mf_neg_count; /* number of negative blocks numbers */ +! blocknr_T mf_infile_count; /* number of pages in the file */ +! unsigned mf_page_size; /* number of bytes in a page */ +! int mf_dirty; /* TRUE if there are dirty blocks */ + #ifdef FEAT_CRYPT +! buf_T *mf_buffer; /* buffer this memfile is for */ +! char_u mf_seed[MF_SEED_LEN]; /* seed for encryption */ + +! /* Values for key, method and seed used for reading data blocks when +! * updating for a newly set key or method. Only when mf_old_key != NULL. */ + char_u *mf_old_key; + int mf_old_cm; + char_u mf_old_seed[MF_SEED_LEN]; +--- 604,633 ---- + + struct memfile + { +! char_u *mf_fname; // name of the file +! char_u *mf_ffname; // idem, full path +! int mf_fd; // file descriptor +! int mf_flags; // flags used when opening this memfile +! int mf_reopen; // mf_fd was closed, retry opening +! bhdr_T *mf_free_first; // first block_hdr in free list +! bhdr_T *mf_used_first; // mru block_hdr in used list +! bhdr_T *mf_used_last; // lru block_hdr in used list +! unsigned mf_used_count; // number of pages in used list +! unsigned mf_used_count_max; // maximum number of pages in memory +! mf_hashtab_T mf_hash; // hash lists +! mf_hashtab_T mf_trans; // trans lists +! blocknr_T mf_blocknr_max; // highest positive block number + 1 +! blocknr_T mf_blocknr_min; // lowest negative block number - 1 +! blocknr_T mf_neg_count; // number of negative blocks numbers +! blocknr_T mf_infile_count; // number of pages in the file +! unsigned mf_page_size; // number of bytes in a page +! int mf_dirty; // TRUE if there are dirty blocks + #ifdef FEAT_CRYPT +! buf_T *mf_buffer; // buffer this memfile is for +! char_u mf_seed[MF_SEED_LEN]; // seed for encryption + +! // Values for key, method and seed used for reading data blocks when +! // updating for a newly set key or method. Only when mf_old_key != NULL. + char_u *mf_old_key; + int mf_old_cm; + char_u mf_old_seed[MF_SEED_LEN]; +*** ../vim-8.1.1412/src/testdir/test_startup.vim 2019-05-20 22:12:30.724442773 +0200 +--- src/testdir/test_startup.vim 2019-05-27 23:34:05.857353849 +0200 +*************** +*** 288,311 **** + + " Test with default argument '-q'. + call assert_equal('errors.err', &errorfile) +! call writefile(["../memfile.c:1482:5: error: expected ';' before '}' token"], 'errors.err') + if RunVim([], after, '-q') + let lines = readfile('Xtestout') + call assert_equal(['errors.err', +! \ '[0, 1482, 5, 0]', +! \ source_file . "|1482 col 5| error: expected ';' before '}' token"], + \ lines) + endif + call delete('Xtestout') + call delete('errors.err') + + " Test with explicit argument '-q Xerrors' (with space). +! call writefile(["../memfile.c:1482:5: error: expected ';' before '}' token"], 'Xerrors') + if RunVim([], after, '-q Xerrors') + let lines = readfile('Xtestout') + call assert_equal(['Xerrors', +! \ '[0, 1482, 5, 0]', +! \ source_file . "|1482 col 5| error: expected ';' before '}' token"], + \ lines) + endif + call delete('Xtestout') +--- 288,311 ---- + + " Test with default argument '-q'. + call assert_equal('errors.err', &errorfile) +! call writefile(["../memfile.c:208:5: error: expected ';' before '}' token"], 'errors.err') + if RunVim([], after, '-q') + let lines = readfile('Xtestout') + call assert_equal(['errors.err', +! \ '[0, 208, 5, 0]', +! \ source_file . "|208 col 5| error: expected ';' before '}' token"], + \ lines) + endif + call delete('Xtestout') + call delete('errors.err') + + " Test with explicit argument '-q Xerrors' (with space). +! call writefile(["../memfile.c:208:5: error: expected ';' before '}' token"], 'Xerrors') + if RunVim([], after, '-q Xerrors') + let lines = readfile('Xtestout') + call assert_equal(['Xerrors', +! \ '[0, 208, 5, 0]', +! \ source_file . "|208 col 5| error: expected ';' before '}' token"], + \ lines) + endif + call delete('Xtestout') +*************** +*** 314,321 **** + if RunVim([], after, '-qXerrors') + let lines = readfile('Xtestout') + call assert_equal(['Xerrors', +! \ '[0, 1482, 5, 0]', +! \ source_file . "|1482 col 5| error: expected ';' before '}' token"], + \ lines) + endif + +--- 314,321 ---- + if RunVim([], after, '-qXerrors') + let lines = readfile('Xtestout') + call assert_equal(['Xerrors', +! \ '[0, 208, 5, 0]', +! \ source_file . "|208 col 5| error: expected ';' before '}' token"], + \ lines) + endif + +*** ../vim-8.1.1412/src/version.c 2019-05-27 22:21:41.309951907 +0200 +--- src/version.c 2019-05-27 23:15:38.563021697 +0200 +*************** +*** 769,770 **** +--- 769,772 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 1413, + /**/ + +-- +Portable Computer: A device invented to force businessmen +to work at home, on vacation, and on business trips. + + /// 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 /// |