X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=notmuch-new.c;h=f25c71f3450f686eae1c50b9d4ed8f9cf55c6959;hp=b740ee2b8c29d0e09d65f19de92693f2bcb448b3;hb=7a9bacac6786729d7f28495b0ef30f9b6ded7696;hpb=c340c1bd1140c0a1b7e0f24ef3ebac806f5fc3e6 diff --git a/notmuch-new.c b/notmuch-new.c index b740ee2b..f25c71f3 100644 --- a/notmuch-new.c +++ b/notmuch-new.c @@ -153,7 +153,7 @@ _entries_resemble_maildir (struct dirent **entries, int count) int i, found = 0; for (i = 0; i < count; i++) { - if (entries[i]->d_type != DT_DIR) + if (entries[i]->d_type != DT_DIR && entries[i]->d_type != DT_UNKNOWN) continue; if (strcmp(entries[i]->d_name, "new") == 0 || @@ -273,8 +273,19 @@ add_files_recursive (notmuch_database_t *notmuch, entry = fs_entries[i]; - if (entry->d_type != DT_DIR && entry->d_type != DT_LNK) + /* We only want to descend into directories. + * But symlinks can be to directories too, of course. + * + * And if the filesystem doesn't tell us the file type in the + * scandir results, then it might be a directory (and if not, + * then we'll stat and return immediately in the next level of + * recursion). */ + if (entry->d_type != DT_DIR && + entry->d_type != DT_LNK && + entry->d_type != DT_UNKNOWN) + { continue; + } /* Ignore special directories to avoid infinite recursion. * Also ignore the .notmuch directory and any "tmp" directory @@ -342,8 +353,14 @@ add_files_recursive (notmuch_database_t *notmuch, } /* If we're looking at a symlink, we only want to add it if it - * links to a regular file, (and not to a directory, say). */ - if (entry->d_type == DT_LNK) { + * links to a regular file, (and not to a directory, say). + * + * Similarly, if the file is of unknown type (due to filesytem + * limitations), then we also need to look closer. + * + * In either case, a stat does the trick. + */ + if (entry->d_type == DT_LNK || entry->d_type == DT_UNKNOWN) { int err; next = talloc_asprintf (notmuch, "%s/%s", path, entry->d_name);