std: Handle DT_DIR file types in dirent
pointers
This "fast path" in `DirEntry::file_type` on Unix wasn't turning out to be so much of a fast path as the `DT_DIR` case wasn't handled, so directories fell back to using `lstat` instead. This commit adds the missing case to return quickly if a path is a directory and `DirEntry::file_type` is used.
This commit is contained in:
parent
c322dbbf8a
commit
e7aad28614
@ -50,7 +50,7 @@ rust_list_dir_val(struct dirent* entry_ptr) {
|
||||
|
||||
int
|
||||
rust_dir_get_mode(struct dirent* entry_ptr) {
|
||||
#if defined(_DIRENT_HAVE_D_TYPE)
|
||||
#if defined(_DIRENT_HAVE_D_TYPE) || defined(__APPLE__)
|
||||
switch (entry_ptr->d_type) {
|
||||
case DT_BLK: return S_IFBLK;
|
||||
case DT_CHR: return S_IFCHR;
|
||||
@ -58,6 +58,7 @@ rust_dir_get_mode(struct dirent* entry_ptr) {
|
||||
case DT_LNK: return S_IFLNK;
|
||||
case DT_REG: return S_IFREG;
|
||||
case DT_SOCK: return S_IFSOCK;
|
||||
case DT_DIR: return S_IFDIR;
|
||||
}
|
||||
#endif
|
||||
return -1;
|
||||
|
Loading…
Reference in New Issue
Block a user