MCPcopy Create free account
hub / github.com/Pagghiu/SaneCppLibraries / fillFileDescriptorWindowsStat

Function fillFileDescriptorWindowsStat

Libraries/File/File.cpp:55–87  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

53}
54
55static SC::Result fillFileDescriptorWindowsStat(HANDLE fileHandle, SC::FileDescriptorStat& fileStat)
56{
57 fileStat = {};
58
59 BY_HANDLE_FILE_INFORMATION handleInfo;
60 SC_TRY_MSG(::GetFileInformationByHandle(fileHandle, &handleInfo) != FALSE, "GetFileInformationByHandle failed");
61
62 FILE_STANDARD_INFO standardInfo = {};
63 const bool hasStandardInfo =
64 ::GetFileInformationByHandleEx(fileHandle, FileStandardInfo, &standardInfo, sizeof(standardInfo)) != FALSE;
65
66 FILE_ATTRIBUTE_TAG_INFO tagInfo = {};
67 if (::GetFileInformationByHandleEx(fileHandle, FileAttributeTagInfo, &tagInfo, sizeof(tagInfo)) == FALSE)
68 {
69 tagInfo.FileAttributes = handleInfo.dwFileAttributes;
70 tagInfo.ReparseTag = 0;
71 }
72
73 fileStat.entryType = fileDescriptorWindowsEntryTypeFromAttributes(handleInfo.dwFileAttributes, tagInfo.ReparseTag);
74 fileStat.creationTime = fileDescriptorWindowsFileTimeToTimeMs(handleInfo.ftCreationTime);
75 fileStat.accessedTime = fileDescriptorWindowsFileTimeToTimeMs(handleInfo.ftLastAccessTime);
76 fileStat.modifiedTime = fileDescriptorWindowsFileTimeToTimeMs(handleInfo.ftLastWriteTime);
77 fileStat.fileSize =
78 static_cast<SC::size_t>((static_cast<SC::uint64_t>(handleInfo.nFileSizeHigh) << 32) | handleInfo.nFileSizeLow);
79 fileStat.hardLinkCount = hasStandardInfo ? static_cast<SC::size_t>(standardInfo.NumberOfLinks)
80 : static_cast<SC::size_t>(handleInfo.nNumberOfLinks);
81 fileStat.windows.attributes = handleInfo.dwFileAttributes;
82 fileStat.windows.reparseTag = tagInfo.ReparseTag;
83 fileStat.windows.volumeSerialNumber = handleInfo.dwVolumeSerialNumber;
84 fileStat.windows.fileIndex =
85 (static_cast<SC::uint64_t>(handleInfo.nFileIndexHigh) << 32) | handleInfo.nFileIndexLow;
86 return SC::Result(true);
87}
88} // namespace
89
90//-------------------------------------------------------------------------------------------------------

Callers 1

statMethod · 0.85

Tested by

no test coverage detected