notmuch-new: Check for non-fatal errors from stat()
authorChris Wilson <chris@chris-wilson.co.uk>
Fri, 27 Nov 2009 13:50:11 +0000 (13:50 +0000)
committerCarl Worth <cworth@cworth.org>
Sat, 28 Nov 2009 05:36:35 +0000 (21:36 -0800)
Currently we assume that all errors on stat() a dname is fatal (but
continue anyway and report the error at the end). However, some errors
reported by stat() such as a missing file or insufficient privilege,
we can simply ignore and skip the file. For the others, such as a fault
(unlikely!) or out-of-memory, we handle like the other fatal errors by
jumping to the end.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
notmuch-new.c

index 6405cf0e5502c97893a30c46a577bb9f89be855b..f58a384b52b1cf48cbb7067b2e5f8743e9b0aeae 100644 (file)
@@ -197,10 +197,21 @@ add_files_recursive (notmuch_database_t *notmuch,
        next = talloc_asprintf (notmuch, "%s/%s", path, entry->d_name);
 
        if (stat (next, st)) {
+           int err = errno;
+
+           switch (err) {
+           case ENOENT:
+               /* The file was removed between scandir and now... */
+           case EPERM:
+           case EACCES:
+               /* We can't read this file so don't add it to the cache. */
+               continue;
+           }
+
            fprintf (stderr, "Error reading %s: %s\n",
                     next, strerror (errno));
            ret = NOTMUCH_STATUS_FILE_ERROR;
-           continue;
+           goto DONE;
        }
 
        if (S_ISREG (st->st_mode)) {