22 HANDLE hFile = CreateFileA(path, FILE_WRITE_ATTRIBUTES, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
23 if (hFile == INVALID_HANDLE_VALUE)
return false;
26 LONGLONG ll = Int32x32To64(epoch, 10000000) + 116444736000000000;
27 ft.dwLowDateTime = (DWORD)ll;
28 ft.dwHighDateTime = (DWORD)(ll >> 32);
32 result = SetFileTime(hFile, NULL, &ft, NULL) != 0;
33 }
else if (param ==
'c') {
34 result = SetFileTime(hFile, &ft, NULL, NULL) != 0;
35 }
else if (param ==
'm') {
36 result = SetFileTime(hFile, NULL, NULL, &ft) != 0;
44 if (stat(path, &st) != 0)
return false;
47 times.actime = st.st_atime;
48 times.modtime = st.st_mtime;
52 }
else if (param ==
'm') {
53 times.modtime = epoch;
58 return utime(path, ×) == 0;
64 WIN32_FILE_ATTRIBUTE_DATA fileInfo;
65 if (!GetFileAttributesExA(path, GetFileExInfoStandard, &fileInfo))
return -1;
68 if (param ==
'a') ft = fileInfo.ftLastAccessTime;
69 else if (param ==
'c') ft = fileInfo.ftCreationTime;
70 else if (param ==
'm') ft = fileInfo.ftLastWriteTime;
74 ull.LowPart = ft.dwLowDateTime;
75 ull.HighPart = ft.dwHighDateTime;
76 return (int64_t)((ull.QuadPart - 116444736000000000) / 10000000);
80 if (stat(path, &st) != 0)
return -1;
82 if (param ==
'a')
return (int64_t)st.st_atime;
83 else if (param ==
'm')
return (int64_t)st.st_mtime;
84#if defined(__APPLE__) || defined(__FreeBSD__)
85 else if (param ==
'c')
return (int64_t)st.st_birthtime;
95 HANDLE hFile = CreateFileA(path, GENERIC_READ,
96 FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
97 NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
98 if (hFile == INVALID_HANDLE_VALUE)
return 0;
100 BY_HANDLE_FILE_INFORMATION info;
101 if (!GetFileInformationByHandle(hFile, &info)) {
106 return (nlink_t)info.nNumberOfLinks;
111 if (stat(path, &st) != 0)
return 0;
124 PSID pSidOwner = NULL;
125 PSECURITY_DESCRIPTOR pSD = NULL;
126 if (GetNamedSecurityInfoA(path, SE_FILE_OBJECT, OWNER_SECURITY_INFORMATION,
127 &pSidOwner, NULL, NULL, NULL, &pSD) != ERROR_SUCCESS) {
132 *uid = (uid_t)GetSidIdentifierAuthority(pSidOwner)->Value[5];
135 if (pSD) LocalFree(pSD);
141 if (stat(path, &st) != 0)
return false;
142 if (uid) *uid = st.st_uid;
143 if (gid) *gid = st.st_gid;