diff options
| author | David Vázquez Púa <davazp@gmail.com> | 2019-04-19 20:42:52 +0200 |
|---|---|---|
| committer | David Vázquez Púa <davazp@gmail.com> | 2019-04-19 20:42:52 +0200 |
| commit | d602a6b942e32f4f9a36b6c44471cfcd80a81bb6 (patch) | |
| tree | 196c3242a6a6a4bcf96e525aac5e5927b197c32b /src/libstd/sys | |
| parent | a2bbf7debaab60be33bd8008a71bca69576945a0 (diff) | |
| download | rust-d602a6b942e32f4f9a36b6c44471cfcd80a81bb6.tar.gz rust-d602a6b942e32f4f9a36b6c44471cfcd80a81bb6.zip | |
Fix sync_all on macos/ios
sync_all should flush all metadata in macos/ios, so it should call fcntl with the F_FULLFSYNC flag as sync_data does. Fixes #55920
Diffstat (limited to 'src/libstd/sys')
| -rw-r--r-- | src/libstd/sys/unix/fs.rs | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/libstd/sys/unix/fs.rs b/src/libstd/sys/unix/fs.rs index a14db108c34..761f1d8c673 100644 --- a/src/libstd/sys/unix/fs.rs +++ b/src/libstd/sys/unix/fs.rs @@ -526,8 +526,15 @@ impl File { } pub fn fsync(&self) -> io::Result<()> { - cvt_r(|| unsafe { libc::fsync(self.0.raw()) })?; - Ok(()) + cvt_r(|| unsafe { os_fsync(self.0.raw()) })?; + return Ok(()); + + #[cfg(any(target_os = "macos", target_os = "ios"))] + unsafe fn os_fsync(fd: c_int) -> c_int { + libc::fcntl(fd, libc::F_FULLFSYNC) + } + #[cfg(not(any(target_os = "macos", target_os = "ios")))] + unsafe fn os_fsync(fd: c_int) -> c_int { libc::fsync(fd) } } pub fn datasync(&self) -> io::Result<()> { |
