1use std::{fs::File, io};
2
3pub(crate) fn flush(file: &File) -> io::Result<()> {
4 let result = file.sync_all();
5 #[cfg(target_os = "macos")]
6 if result
7 .as_ref()
8 .is_err_and(|error| error.raw_os_error() == Some(nix::libc::ENOTSUP))
9 {
10 // SMB uses standard FLUSH when Apple's F_FULLFSYNC extension is unavailable.
11 return nix::unistd::fsync(file).map_err(io::Error::from);
12 }
13 result
14}