aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/src/filesystem/std-dir.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3/src/filesystem/std-dir.cc')
-rw-r--r--libstdc++-v3/src/filesystem/std-dir.cc8
1 files changed, 7 insertions, 1 deletions
diff --git a/libstdc++-v3/src/filesystem/std-dir.cc b/libstdc++-v3/src/filesystem/std-dir.cc
index 98eb22ab920..c14fa185974 100644
--- a/libstdc++-v3/src/filesystem/std-dir.cc
+++ b/libstdc++-v3/src/filesystem/std-dir.cc
@@ -57,7 +57,13 @@ struct fs::_Dir : _Dir_base
{
if (const auto entp = _Dir_base::advance(skip_permission_denied, ec))
{
- entry = fs::directory_entry{path / entp->d_name, get_file_type(*entp)};
+ file_type type = file_type::none;
+#ifdef _GLIBCXX_HAVE_STRUCT_DIRENT_D_TYPE
+ // Even if the OS supports dirent::d_type the filesystem might not:
+ if (entp->d_type != DT_UNKNOWN)
+ type = get_file_type(*entp);
+#endif
+ entry = fs::directory_entry{path / entp->d_name, type};
return true;
}
else if (!ec)