mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-28 21:54:10 +01:00
notmuch new: Fix to work on filesystems returning DT_UNKNOWN
Such as reiserfs or xfs. This has been broken since the merge of support for rename and deletion of files from the mail store. Here's the original justification for the patch: A review of notmuch-new.c shows three uses of ->d_type: Near line 153, in _entries_resemble_maildir() we can simply allow for DT_UNKNOWN. This would fail if people have MH-style folders which have three folders called "new" "cur" and "tmp", but that seems unlikely, in which case the "tmp" folder would simply not be scanned. Near line 273 in add_files_recursive() we have another check. If DT_UNKNOWN, we fall through, then add_files_recursive() does a stat almost immediately, returning with success if the path isn't a directory. Thus, the fallback is already written. Finally, near line 343, in add_files_recursive() (a long function) we have another check. Here we can simply treat DT_UNKNOWN as DT_LNK, since the logic for the stat() results are the same.
This commit is contained in:
parent
1ef33800df
commit
c5416b6f1b
1 changed files with 4 additions and 3 deletions
|
@ -153,7 +153,7 @@ _entries_resemble_maildir (struct dirent **entries, int count)
|
||||||
int i, found = 0;
|
int i, found = 0;
|
||||||
|
|
||||||
for (i = 0; i < count; i++) {
|
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;
|
continue;
|
||||||
|
|
||||||
if (strcmp(entries[i]->d_name, "new") == 0 ||
|
if (strcmp(entries[i]->d_name, "new") == 0 ||
|
||||||
|
@ -273,7 +273,8 @@ add_files_recursive (notmuch_database_t *notmuch,
|
||||||
|
|
||||||
entry = fs_entries[i];
|
entry = fs_entries[i];
|
||||||
|
|
||||||
if (entry->d_type != DT_DIR && entry->d_type != DT_LNK)
|
if (entry->d_type != DT_DIR && entry->d_type != DT_LNK
|
||||||
|
&& entry->d_type != DT_UNKNOWN)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Ignore special directories to avoid infinite recursion.
|
/* Ignore special directories to avoid infinite recursion.
|
||||||
|
@ -343,7 +344,7 @@ add_files_recursive (notmuch_database_t *notmuch,
|
||||||
|
|
||||||
/* If we're looking at a symlink, we only want to add it if it
|
/* 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). */
|
* links to a regular file, (and not to a directory, say). */
|
||||||
if (entry->d_type == DT_LNK) {
|
if (entry->d_type == DT_LNK || entry->d_type == DT_UNKNOWN) {
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
next = talloc_asprintf (notmuch, "%s/%s", path, entry->d_name);
|
next = talloc_asprintf (notmuch, "%s/%s", path, entry->d_name);
|
||||||
|
|
Loading…
Reference in a new issue