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

Function fillWindowsFileStat

Libraries/FileSystem/FileSystem.cpp:804–835  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

802}
803
804static SC::Result fillWindowsFileStat(HANDLE hFile, SC::FileSystemStat& fileStat)
805{
806 fileStat = {};
807
808 BY_HANDLE_FILE_INFORMATION handleInfo;
809 SC_TRY_MSG(::GetFileInformationByHandle(hFile, &handleInfo) != FALSE, "stat: Failed to get file information");
810 FILE_STANDARD_INFO standardInfo = {};
811 const bool hasStandardInfo =
812 ::GetFileInformationByHandleEx(hFile, FileStandardInfo, &standardInfo, sizeof(standardInfo)) != FALSE;
813
814 FILE_ATTRIBUTE_TAG_INFO tagInfo = {};
815 if (::GetFileInformationByHandleEx(hFile, FileAttributeTagInfo, &tagInfo, sizeof(tagInfo)) == FALSE)
816 {
817 tagInfo.FileAttributes = handleInfo.dwFileAttributes;
818 tagInfo.ReparseTag = 0;
819 }
820
821 fileStat.entryType = windowsEntryTypeFromAttributes(handleInfo.dwFileAttributes, tagInfo.ReparseTag);
822 fileStat.creationTime = windowsFileTimeToTimeMs(handleInfo.ftCreationTime);
823 fileStat.accessedTime = windowsFileTimeToTimeMs(handleInfo.ftLastAccessTime);
824 fileStat.modifiedTime = windowsFileTimeToTimeMs(handleInfo.ftLastWriteTime);
825 fileStat.fileSize =
826 static_cast<SC::size_t>((static_cast<SC::uint64_t>(handleInfo.nFileSizeHigh) << 32) | handleInfo.nFileSizeLow);
827 fileStat.hardLinkCount = hasStandardInfo ? static_cast<SC::size_t>(standardInfo.NumberOfLinks)
828 : static_cast<SC::size_t>(handleInfo.nNumberOfLinks);
829 fileStat.windows.attributes = handleInfo.dwFileAttributes;
830 fileStat.windows.reparseTag = tagInfo.ReparseTag;
831 fileStat.windows.volumeSerialNumber = handleInfo.dwVolumeSerialNumber;
832 fileStat.windows.fileIndex =
833 (static_cast<SC::uint64_t>(handleInfo.nFileIndexHigh) << 32) | handleInfo.nFileIndexLow;
834 return SC::Result(true);
835}
836
837static SC::Result windowsStat(SC::StringSpan path, bool followLinks, SC::FileSystemStat& fileStat)
838{

Callers 1

windowsStatFunction · 0.85

Calls 3

windowsFileTimeToTimeMsFunction · 0.85
ResultClass · 0.50

Tested by

no test coverage detected