Skip to content

Commit

Permalink
scanner: don't skip directory entries with type DT_UNKNOWN
Browse files Browse the repository at this point in the history
According to the readdir(2) man-page, not all file-systems support returning the
entry's file-type in `d_type`.  For example, the reprotest reproducibility tool,
uses the disorderfs FUSE file-system to shuffle the order in which directory
entries are returned, and this does not set `d_type`.  Therefore, in addition to
entries with type `DT_DIR` and `DT_LNK`, also process entries with type
`DT_UNKNOWN`.

Signed-off-by: Jeremy Sowden <azazel@debian.org>
  • Loading branch information
a3a3el committed May 1, 2024
1 parent 808d725 commit 5a1ca77
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions lib/mu-scanner.cc
Original file line number Diff line number Diff line change
Expand Up @@ -215,9 +215,13 @@ Scanner::Private::process_dir(const std::string& path, bool is_maildir)
while (running_) {
errno = 0;
if (const auto& dentry{::readdir(dir)}; dentry) {
#if HAVE_DIRENT_D_TYPE /* opttimization: filter out non-dirs early */
#if HAVE_DIRENT_D_TYPE /* optimization: filter out non-dirs early. NB not all file-systems support
* returning the file-type in `d_type`, so don't skip `DT_UNKNOWN`.
*/
if (maildirs_only_mode() &&
dentry->d_type != DT_DIR && dentry->d_type != DT_LNK)
dentry->d_type != DT_DIR &&
dentry->d_type != DT_LNK &&
dentry->d_type != DT_UNKNOWN)
continue;
#endif /*HAVE_DIRENT_D_TYPE*/
dir_entries.emplace_back(dentry);
Expand Down

0 comments on commit 5a1ca77

Please sign in to comment.