52 lines
941 B
C
52 lines
941 B
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* 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;
|
|
}
|