1
0
forked from aniani/vim

patch 8.1.0915: fsync() may not work properly on Mac

Problem:    fsync() may not work properly on Mac.
Solution:   Use fcntl() with F_FULLFSYNC. (suggested by Justin M. Keyes)
This commit is contained in:
Bram Moolenaar
2019-02-14 12:56:36 +01:00
parent 5fd0f5052f
commit a787019518
5 changed files with 28 additions and 6 deletions

View File

@@ -4661,7 +4661,7 @@ restore_backup:
* work (could be a pipe).
* If the 'fsync' option is FALSE, don't fsync(). Useful for laptops.
*/
if (p_fs && fsync(fd) != 0 && !device)
if (p_fs && vim_fsync(fd) != 0 && !device)
{
errmsg = (char_u *)_(e_fsync);
end = 0;
@@ -5123,6 +5123,25 @@ nofail:
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.