summaryrefslogtreecommitdiffstats
path: root/libcxx
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2018-07-23 22:58:46 +0000
committerEric Fiselier <eric@efcs.ca>2018-07-23 22:58:46 +0000
commit54f10f8e68012217c5a72bc68d98104303a3c0e0 (patch)
treec7d98b8f654c58ef8d1e41a48ffaad327ebf79ad /libcxx
parentf66e4f7dbd66ff3a9fdd33c4f6b21166ed8c5095 (diff)
downloadbcm5719-llvm-54f10f8e68012217c5a72bc68d98104303a3c0e0.tar.gz
bcm5719-llvm-54f10f8e68012217c5a72bc68d98104303a3c0e0.zip
Handle DT_UNKNOWN correctly during directory iteration.
Unlike stat and lstat, where unknown really means we know it's something weird, during directory iteration DT_UNKNOWN simply means that the underlying FS doesn't support the dirent::dt_type field. This patch fixes libc++ to correctly set the cache to empty when DT_UNKNOWN is reported. llvm-svn: 337768
Diffstat (limited to 'libcxx')
-rw-r--r--libcxx/src/experimental/filesystem/directory_iterator.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/libcxx/src/experimental/filesystem/directory_iterator.cpp b/libcxx/src/experimental/filesystem/directory_iterator.cpp
index c95ebc8ac34..7a1ab257354 100644
--- a/libcxx/src/experimental/filesystem/directory_iterator.cpp
+++ b/libcxx/src/experimental/filesystem/directory_iterator.cpp
@@ -42,8 +42,11 @@ static file_type get_file_type(DirEntT *ent, int) {
return file_type::regular;
case DT_SOCK:
return file_type::socket;
+ // Unlike in lstat, hitting "unknown" here simply means that the underlying
+ // filesystem doesn't support d_type. Report is as 'none' so we correctly
+ // set the cache to empty.
case DT_UNKNOWN:
- return file_type::unknown;
+ break;
}
return file_type::none;
}
OpenPOWER on IntegriCloud