diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index a7b1ef23bc..d3184dbf5c 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1504,6 +1504,7 @@ virSecurityManagerVerify; # util/glibcompat.h +vir_g_fsync; vir_g_strdup_printf; vir_g_strdup_vprintf; diff --git a/src/util/glibcompat.c b/src/util/glibcompat.c index 3f830840cf..4ebefb4478 100644 --- a/src/util/glibcompat.c +++ b/src/util/glibcompat.c @@ -19,11 +19,13 @@ #include #include +#include #include "glibcompat.h" #undef g_strdup_printf #undef g_strdup_vprintf +#undef g_fsync /* Due to a bug in glib, g_strdup_printf() nor g_strdup_vprintf() * abort on OOM. It's fixed in glib's upstream. Provide our own @@ -51,3 +53,14 @@ vir_g_strdup_vprintf(const char *msg, va_list args) abort(); return ret; } + + +gint +vir_g_fsync(gint fd) +{ +#ifdef G_OS_WIN32 + return _commit(fd); +#else + return fsync(fd); +#endif +} diff --git a/src/util/glibcompat.h b/src/util/glibcompat.h index 2bbbe57612..d6b83f4b93 100644 --- a/src/util/glibcompat.h +++ b/src/util/glibcompat.h @@ -25,8 +25,13 @@ char *vir_g_strdup_printf(const char *msg, ...) G_GNUC_PRINTF(1, 2); char *vir_g_strdup_vprintf(const char *msg, va_list args) G_GNUC_PRINTF(1, 0); +gint vir_g_fsync(gint fd); #if !GLIB_CHECK_VERSION(2, 64, 0) # define g_strdup_printf vir_g_strdup_printf # define g_strdup_vprintf vir_g_strdup_vprintf #endif + +#if !GLIB_CHECK_VERSION(2, 63, 0) +# define g_fsync vir_g_fsync +#endif