[Static Analysis] Resolved some issues mentioned in Alexandr-u report

This commit is contained in:
Gliniak
2024-11-02 18:26:06 +01:00
parent b471423c1a
commit 3ac98ebfba
10 changed files with 42 additions and 37 deletions

View File

@@ -13,6 +13,7 @@
#include <filesystem>
#include <iterator>
#include <memory>
#include <optional>
#include <regex>
#include <string>
#include <string_view>
@@ -122,7 +123,8 @@ struct FileInfo {
uint64_t access_timestamp;
uint64_t write_timestamp;
};
bool GetInfo(const std::filesystem::path& path, FileInfo* out_info);
std::optional<FileInfo> GetInfo(const std::filesystem::path& path);
std::vector<FileInfo> ListFiles(const std::filesystem::path& path);
std::vector<FileInfo> ListDirectories(const std::filesystem::path& path);
std::vector<FileInfo> FilterByName(const std::vector<FileInfo>& files,

View File

@@ -205,26 +205,28 @@ std::unique_ptr<FileHandle> FileHandle::OpenExisting(
#define COMBINE_TIME(t) (((uint64_t)t.dwHighDateTime << 32) | t.dwLowDateTime)
bool GetInfo(const std::filesystem::path& path, FileInfo* out_info) {
std::memset(out_info, 0, sizeof(FileInfo));
std::optional<FileInfo> GetInfo(const std::filesystem::path& path) {
WIN32_FILE_ATTRIBUTE_DATA data = {0};
if (!GetFileAttributesEx(path.c_str(), GetFileExInfoStandard, &data)) {
return false;
return {};
}
FileInfo out_info{};
if (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
out_info->type = FileInfo::Type::kDirectory;
out_info->total_size = 0;
out_info.type = FileInfo::Type::kDirectory;
out_info.total_size = 0;
} else {
out_info->type = FileInfo::Type::kFile;
out_info->total_size =
out_info.type = FileInfo::Type::kFile;
out_info.total_size =
(data.nFileSizeHigh * (size_t(MAXDWORD) + 1)) + data.nFileSizeLow;
}
out_info->path = path.parent_path();
out_info->name = path.filename();
out_info->create_timestamp = COMBINE_TIME(data.ftCreationTime);
out_info->access_timestamp = COMBINE_TIME(data.ftLastAccessTime);
out_info->write_timestamp = COMBINE_TIME(data.ftLastWriteTime);
return true;
out_info.path = path.parent_path();
out_info.name = path.filename();
out_info.create_timestamp = COMBINE_TIME(data.ftCreationTime);
out_info.access_timestamp = COMBINE_TIME(data.ftLastAccessTime);
out_info.write_timestamp = COMBINE_TIME(data.ftLastWriteTime);
return std::move(out_info);
}
std::vector<FileInfo> ListFiles(const std::filesystem::path& path) {