aboutsummaryrefslogtreecommitdiffhomepage
path: root/notmuch-new.c
diff options
context:
space:
mode:
authorGravatar Chris Wilson <chris@chris-wilson.co.uk>2009-11-27 13:50:11 +0000
committerGravatar Carl Worth <cworth@cworth.org>2009-11-27 21:36:35 -0800
commitde064f177202b8e7ec4073eef24b17f91eba11c8 (patch)
treecbc20648053b70f782459f34ebdc9069536c8d3f /notmuch-new.c
parentf94146bd39f0453b8b31f690e1ebb8f8860468f8 (diff)
notmuch-new: Check for non-fatal errors from stat()
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>
Diffstat (limited to 'notmuch-new.c')
-rw-r--r--notmuch-new.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/notmuch-new.c b/notmuch-new.c
index 6405cf0e..f58a384b 100644
--- a/notmuch-new.c
+++ b/notmuch-new.c
@@ -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)) {