Git fork
1#include "git-compat-util.h"
2#include <winternl.h>
3#include "lazyload.h"
4
5int win32_fsync_no_flush(int fd)
6{
7 IO_STATUS_BLOCK io_status;
8
9#define FLUSH_FLAGS_FILE_DATA_ONLY 1
10
11 DECLARE_PROC_ADDR(ntdll.dll, NTSTATUS, NTAPI, NtFlushBuffersFileEx,
12 HANDLE FileHandle, ULONG Flags, PVOID Parameters, ULONG ParameterSize,
13 PIO_STATUS_BLOCK IoStatusBlock);
14
15 if (!INIT_PROC_ADDR(NtFlushBuffersFileEx)) {
16 errno = ENOSYS;
17 return -1;
18 }
19
20 memset(&io_status, 0, sizeof(io_status));
21 if (NtFlushBuffersFileEx((HANDLE)_get_osfhandle(fd), FLUSH_FLAGS_FILE_DATA_ONLY,
22 NULL, 0, &io_status)) {
23 errno = EINVAL;
24 return -1;
25 }
26
27 return 0;
28}