From 2804406f1c3ac4abd773a251a88da26a89b4fbb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fridrich=20=C5=A0trba?= Date: Fri, 28 May 2010 09:18:54 +0200 Subject: Implement replacement fsync() on windows, where it is not present --- backends/markup-tree.c | 37 +++++++++++++++++++++++++++++++++++++ gconf/gconfd.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/backends/markup-tree.c b/backends/markup-tree.c index c08d6c79..4857caec 100644 --- a/backends/markup-tree.c +++ b/backends/markup-tree.c @@ -34,6 +34,43 @@ #include #include +#ifdef G_OS_WIN32 +#include +#include +#define _WIN32_WINNT 0x0500 +#include + +static int +fsync (int fd) +{ + HANDLE h = (HANDLE) _get_osfhandle (fd); + DWORD err; + + if (h == INVALID_HANDLE_VALUE) + { + errno = EBADF; + return -1; + } + + if (!FlushFileBuffers (h)) + { + err = GetLastError (); + switch (err) + { + case ERROR_INVALID_HANDLE: + errno = EINVAL; + break; + + default: + errno = EIO; + } + return -1; + } + + return 0; +} +#endif + typedef struct { char *locale; diff --git a/gconf/gconfd.c b/gconf/gconfd.c index 66c18ffc..2827635d 100644 --- a/gconf/gconfd.c +++ b/gconf/gconfd.c @@ -62,6 +62,36 @@ #include #define _WIN32_WINNT 0x0500 #include + +static int +fsync (int fd) +{ + HANDLE h = (HANDLE) _get_osfhandle (fd); + DWORD err; + + if (h == INVALID_HANDLE_VALUE) + { + errno = EBADF; + return -1; + } + + if (!FlushFileBuffers (h)) + { + err = GetLastError (); + switch (err) + { + case ERROR_INVALID_HANDLE: + errno = EINVAL; + break; + + default: + errno = EIO; + } + return -1; + } + + return 0; +} #endif /* This makes hash table safer when debugging */ -- cgit v1.2.1