diff options
Diffstat (limited to 'data/vim/patches/8.1.0915')
-rw-r--r-- | data/vim/patches/8.1.0915 | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0915 b/data/vim/patches/8.1.0915 new file mode 100644 index 000000000..785e29a02 --- /dev/null +++ b/data/vim/patches/8.1.0915 @@ -0,0 +1,185 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0915 +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.0915 +Problem: fsync() may not work properly on Mac. +Solution: Use fcntl() with F_FULLFSYNC. (suggested by Justin M. Keyes) +Files: src/fileio.c, src/proto/fileio.pro, src/evalfunc.c, src/memfile.c + + +*** ../vim-8.1.0914/src/fileio.c 2019-02-12 22:37:24.181961482 +0100 +--- src/fileio.c 2019-02-14 12:50:03.216177171 +0100 +*************** +*** 4661,4667 **** + * work (could be a pipe). + * If the 'fsync' option is FALSE, don't fsync(). Useful for laptops. + */ +! if (p_fs && fsync(fd) != 0 && !device) + { + errmsg = (char_u *)_(e_fsync); + end = 0; +--- 4661,4667 ---- + * work (could be a pipe). + * If the 'fsync' option is FALSE, don't fsync(). Useful for laptops. + */ +! if (p_fs && vim_fsync(fd) != 0 && !device) + { + errmsg = (char_u *)_(e_fsync); + end = 0; +*************** +*** 5123,5128 **** +--- 5123,5147 ---- + return retval; + } + ++ #if defined(HAVE_FSYNC) || defined(PROTO) ++ /* ++ * Call fsync() with Mac-specific exception. ++ * Return fsync() result: zero for success. ++ */ ++ int ++ vim_fsync(int fd) ++ { ++ int r; ++ ++ # ifdef MACOS_X ++ r = fcntl(fd, F_FULLFSYNC); ++ if (r != 0 && errno == ENOTTY) ++ # endif ++ r = fsync(fd); ++ return r; ++ } ++ #endif ++ + /* + * Set the name of the current buffer. Use when the buffer doesn't have a + * name and a ":r" or ":w" command with a file name is used. +*** ../vim-8.1.0914/src/proto/fileio.pro 2019-01-26 16:20:44.264683546 +0100 +--- src/proto/fileio.pro 2019-02-14 12:50:10.784127736 +0100 +*************** +*** 7,12 **** +--- 7,13 ---- + void set_forced_fenc(exarg_T *eap); + int check_file_readonly(char_u *fname, int perm); + int buf_write(buf_T *buf, char_u *fname, char_u *sfname, linenr_T start, linenr_T end, exarg_T *eap, int append, int forceit, int reset_changed, int filtering); ++ int vim_fsync(int fd); + void msg_add_fname(buf_T *buf, char_u *fname); + void msg_add_lines(int insert_space, long lnum, off_T nchars); + char_u *shorten_fname1(char_u *full_path); +*** ../vim-8.1.0914/src/evalfunc.c 2019-02-12 22:15:03.069282157 +0100 +--- src/evalfunc.c 2019-02-14 12:50:23.456044974 +0100 +*************** +*** 14791,14797 **** + else if (do_fsync) + // Ignore the error, the user wouldn't know what to do about it. + // May happen for a device. +! vim_ignored = fsync(fileno(fd)); + #endif + fclose(fd); + } +--- 14791,14797 ---- + else if (do_fsync) + // Ignore the error, the user wouldn't know what to do about it. + // May happen for a device. +! vim_ignored = vim_fsync(fileno(fd)); + #endif + fclose(fd); + } +*************** +*** 14803,14809 **** + else if (do_fsync) + /* Ignore the error, the user wouldn't know what to do about it. + * May happen for a device. */ +! vim_ignored = fsync(fileno(fd)); + #endif + fclose(fd); + } +--- 14803,14809 ---- + else if (do_fsync) + /* Ignore the error, the user wouldn't know what to do about it. + * May happen for a device. */ +! vim_ignored = vim_fsync(fileno(fd)); + #endif + fclose(fd); + } +*** ../vim-8.1.0914/src/memfile.c 2019-01-13 23:38:33.399773248 +0100 +--- src/memfile.c 2019-02-14 12:51:22.295660849 +0100 +*************** +*** 600,606 **** + */ + if (STRCMP(p_sws, "fsync") == 0) + { +! if (fsync(mfp->mf_fd)) + status = FAIL; + } + else +--- 600,606 ---- + */ + if (STRCMP(p_sws, "fsync") == 0) + { +! if (vim_fsync(mfp->mf_fd)) + status = FAIL; + } + else +*************** +*** 617,623 **** + #ifdef VMS + if (STRCMP(p_sws, "fsync") == 0) + { +! if (fsync(mfp->mf_fd)) + status = FAIL; + } + #endif +--- 617,623 ---- + #ifdef VMS + if (STRCMP(p_sws, "fsync") == 0) + { +! if (vim_fsync(mfp->mf_fd)) + status = FAIL; + } + #endif +*************** +*** 627,633 **** + #endif + #ifdef AMIGA + # if defined(__AROS__) || defined(__amigaos4__) +! if (fsync(mfp->mf_fd) != 0) + status = FAIL; + # else + /* +--- 627,633 ---- + #endif + #ifdef AMIGA + # if defined(__AROS__) || defined(__amigaos4__) +! if (vim_fsync(mfp->mf_fd) != 0) + status = FAIL; + # else + /* +*** ../vim-8.1.0914/src/version.c 2019-02-13 22:45:21.512636158 +0100 +--- src/version.c 2019-02-14 12:53:58.158767467 +0100 +*************** +*** 785,786 **** +--- 785,788 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 915, + /**/ + + +-- +THEOREM: VI is perfect. +PROOF: VI in roman numerals is 6. The natural numbers < 6 which divide 6 are +1, 2, and 3. 1+2+3 = 6. So 6 is a perfect number. Therefore, VI is perfect. +QED + -- Arthur Tateishi + + /// 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 /// |