mirror of
https://github.com/postgres/postgres.git
synced 2025-08-19 23:22:23 +03:00
Remove configure probe for fdatasync.
fdatasync() is in SUSv2, and all targeted Unix systems have it. We have a replacement function for Windows. We retain the probe for the function declaration, which allows us to supply the mysteriously missing declaration for macOS, and also for Windows. No need to keep a HAVE_FDATASYNC macro around. Also rename src/port/fdatasync.c to win32fdatasync.c since it's only for Windows. Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Reviewed-by: Andres Freund <andres@anarazel.de> Discussion: https://postgr.es/m/CA+hUKGJ3LHeP9w5Fgzdr4G8AnEtJ=z=p6hGDEm4qYGEUX5B6fQ@mail.gmail.com Discussion: https://postgr.es/m/CA%2BhUKGJZJVO%3DiX%2Beb-PXi2_XS9ZRqnn_4URh0NUQOwt6-_51xQ%40mail.gmail.com
This commit is contained in:
53
src/port/win32fdatasync.c
Normal file
53
src/port/win32fdatasync.c
Normal file
@@ -0,0 +1,53 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* win32fdatasync.c
|
||||
* Win32 fdatasync() replacement
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
||||
*
|
||||
* src/port/win32fdatasync.c
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#define UMDF_USING_NTSTATUS
|
||||
|
||||
#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;
|
||||
}
|
Reference in New Issue
Block a user