sys_fs: Debug validation layer for ENOTDIR detector

This commit is contained in:
Elad
2026-07-14 23:22:41 +03:00
parent 2f7b8a7149
commit 9d9f210ddb
+20 -5
View File
@@ -149,24 +149,39 @@ bool verify_mself(const fs::file& mself_file)
// TODO: May not be thread-safe (or even, process-safe)
bool has_non_directory_components(std::string_view path)
{
std::string path0{path};
std::string sub_path{path};
fs::stat_t stat{};
while (true)
{
const std::string sub_path = fs::get_parent_dir(path0);
std::string_view path_sv = fs::get_parent_dir_view(sub_path);
const usz sv_size = path_sv.size();
if (sub_path.size() >= path0.size())
if (sv_size >= sub_path.size())
{
sys_fs.error("has_non_directory_components() did not find a directory! (path=%s, sub_path=%s)", path, sub_path);
break;
}
fs::stat_t stat{};
// Trim child path tail
path_sv = {};
sub_path.resize(sv_size);
if (fs::get_stat(sub_path, stat))
{
if (!stat.is_directory)
{
sys_fs.error("has_non_directory_components() returned an affirmative (sub_path=%s)", sub_path);
}
return !stat.is_directory;
}
path0 = std::move(sub_path);
if (fs::g_tls_error != fs::error::noent)
{
fmt::throw_exception("sys_fs: fs::get_stat() failed with error '%s' (sub_path=%s)", fs::g_tls_error, sub_path);
}
}
return false;