unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
* [PATCH] d_type fix
@ 2010-01-21 20:10 Geo Carncross
  2010-01-23  5:48 ` Carl Worth
  0 siblings, 1 reply; 2+ messages in thread
From: Geo Carncross @ 2010-01-21 20:10 UTC (permalink / raw)
  To: notmuch

[-- Attachment #1: Type: text/plain, Size: 851 bytes --]

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.

Attached is a patch which was tested with reiserfs. It should also work
with xfs.



[-- Attachment #2: notmuch_new_d_type_fix.patch --]
[-- Type: text/x-patch, Size: 1144 bytes --]

diff --git a/notmuch-new.c b/notmuch-new.c
index b740ee2..3e6b96a 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,7 +273,8 @@ add_files_recursive (notmuch_database_t *notmuch,
 
 	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;
 
 	/* 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
 	 * 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;
 
 	    next = talloc_asprintf (notmuch, "%s/%s", path, entry->d_name);

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] d_type fix
  2010-01-21 20:10 [PATCH] d_type fix Geo Carncross
@ 2010-01-23  5:48 ` Carl Worth
  0 siblings, 0 replies; 2+ messages in thread
From: Carl Worth @ 2010-01-23  5:48 UTC (permalink / raw)
  To: Geo Carncross, notmuch

[-- Attachment #1: Type: text/plain, Size: 1243 bytes --]

On Thu, 21 Jan 2010 15:10:18 -0500, Geo Carncross <geocar-notmuch@internetconnection.net> wrote:
> A review of notmuch-new.c shows three uses of ->d_type:

Excellent, thank you.

> 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.

The check will also fail if someone happens to have two regular files
named "cur" and "new" next to a directory named "tmp", (which would then
be ignored). But I agree this seems very unlikely.

> [snip]

The rest of your analysis looks good to me. And it's nice to see how
simple the final patch is.

> Attached is a patch which was tested with reiserfs. It should also work
> with xfs.

I had been waiting to apply the previous patch until I could test it on
a filesystem returning DT_UNKNOWN. But this one looks clean enough to
apply immediately.

One thing that would have made that easier would be a commit message,
(such as making a commit with "git commit" then using "git format-patch"
and "git send-email" to send it). But I'll go ahead and make one up.

Thanks again!

-Carl

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2010-01-23  5:48 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-01-21 20:10 [PATCH] d_type fix Geo Carncross
2010-01-23  5:48 ` Carl Worth

Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).