summaryrefslogtreecommitdiff
path: root/src/win32/fileops.c
blob: d435e706e0daa21e06d16f00d0605d598fc21b38 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#define GIT__WIN32_NO_HIDE_FILEOPS
#include "fileops.h"
#include <errno.h>

int git__unlink(const char *path)
{
	chmod(path, 0666);
	return unlink(path);
}

int git__mkstemp(char *template)
{
	char *file = mktemp(template);
	if (file == NULL)
		return -1;
	return open(file, O_RDWR | O_CREAT | O_BINARY, 0600);
}

int git__fsync(int fd)
{
	HANDLE fh = (HANDLE)_get_osfhandle(fd);

	if (fh == INVALID_HANDLE_VALUE) {
		errno = EBADF;
		return -1;
	}

	if (!FlushFileBuffers(fh)) {
		DWORD code = GetLastError();

		if (code == ERROR_INVALID_HANDLE)
			errno = EINVAL;
		else
			errno = EIO;

		return -1;
	}

	return 0;
}