From: Chris Wilson Date: Fri, 27 Nov 2009 13:50:11 +0000 (+0000) Subject: notmuch-new: Check for non-fatal errors from stat() X-Git-Tag: 0.1~299 X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=commitdiff_plain;h=de064f177202b8e7ec4073eef24b17f91eba11c8 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 --- 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)) {