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 -- [email protected] -- 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 ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.