A wrapper that calls g_fsync on Win32/macOS and fdatasync
elsewhere. g_fsync is a stronger flush than we need but it
satisfies the caller's requirements & matches the approach
gnulib takes.
Reviewed-by: Fabiano Fidêncio <fidencio@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
virFileClose;
virFileComparePaths;
virFileCopyACLs;
+virFileDataSync;
virFileDeleteTree;
virFileDirectFdFlag;
virFileExists;
} while ((amtleft -= interval) > 0);
}
- if (fdatasync(fd) < 0) {
+ if (virFileDataSync(fd) < 0) {
ret = -errno;
virReportSystemError(errno, _("cannot sync data to file '%s'"),
vol->target.path);
remaining -= written;
}
- if (fdatasync(fd) < 0) {
+ if (virFileDataSync(fd) < 0) {
virReportSystemError(errno,
_("cannot sync data to volume with path '%s'"),
path);
}
/* Ensure all data is written */
- if (fdatasync(fdout) < 0) {
+ if (virFileDataSync(fdout) < 0) {
if (errno != EINVAL && errno != EROFS) {
/* fdatasync() may fail on some special FDs, e.g. pipes */
virReportSystemError(errno, _("unable to fsync %s"), fdoutname);
return ret;
}
+
+
+int
+virFileDataSync(int fd)
+{
+#if defined(__APPLE__) || defined(WIN32)
+ return g_fsync(fd);
+#else
+ return fdatasync(fd);
+#endif
+}
int virFileRemoveXAttr(const char *path,
const char *name)
G_GNUC_NO_INLINE;
+
+int virFileDataSync(int fd);