/*------------------------------------------------------------------------- * * win32fdatasync.c * Win32 fdatasync() replacement * * * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * * src/port/win32fdatasync.c * *------------------------------------------------------------------------- */ #ifdef FRONTEND #include "postgres_fe.h" #else #include "postgres.h" #endif #include "port/win32ntdll.h" int fdatasync(int fd) { IO_STATUS_BLOCK iosb; NTSTATUS status; HANDLE handle; handle = (HANDLE) _get_osfhandle(fd); if (handle == INVALID_HANDLE_VALUE) { errno = EBADF; return -1; } if (initialize_ntdll() < 0) return -1; memset(&iosb, 0, sizeof(iosb)); status = pg_NtFlushBuffersFileEx(handle, FLUSH_FLAGS_FILE_DATA_SYNC_ONLY, NULL, 0, &iosb); if (NT_SUCCESS(status)) return 0; _dosmaperr(pg_RtlNtStatusToDosError(status)); return -1; }