MCPcopy Create free account
hub / github.com/WinMerge/winmerge / myfstat

Function myfstat

Src/diffutils/src/mystat.cpp:30–68  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

28}
29
30extern "C" int myfstat(int fd, struct _stat64 *buf)
31{
32 if (buf == nullptr)
33 {
34 errno = EINVAL;
35 return -1;
36 }
37 HANDLE hFile = reinterpret_cast<HANDLE>(_get_osfhandle(fd));
38 if (hFile == INVALID_HANDLE_VALUE)
39 {
40 errno = EBADF;
41 return -1;
42 }
43 memset(buf, 0, sizeof(*buf));
44 switch (GetFileType(hFile) & ~FILE_TYPE_REMOTE)
45 {
46 case FILE_TYPE_CHAR:
47 buf->st_mode = _S_IFCHR;
48 return 0;
49 case FILE_TYPE_PIPE:
50 buf->st_mode = _S_IFIFO;
51 DWORD nBufferSize;
52 if (PeekNamedPipe(hFile, nullptr, 0, nullptr, &nBufferSize, nullptr))
53 buf->st_size = nBufferSize;
54 return 0;
55 case FILE_TYPE_DISK:
56 BY_HANDLE_FILE_INFORMATION hfi;
57 if (!GetFileInformationByHandle(hFile, &hfi))
58 {
59 errno = EBADF;
60 return -1;
61 }
62 set_statbuf(hfi, *buf);
63 return 0;
64 default:
65 errno = EBADF;
66 return -1;
67 }
68}
69
70extern "C" int mywstat(const wchar_t *filename, struct _stat64 *buf)
71{

Callers 1

TESTFunction · 0.85

Calls 1

set_statbufFunction · 0.85

Tested by 1

TESTFunction · 0.68