From: Steinar H. Gunderson Date: Sun, 30 Jan 2022 20:13:57 +0000 (+0100) Subject: If stat() on a directory check, see if it's an excluded filesystem. X-Git-Tag: 1.1.15~1 X-Git-Url: https://git.sesse.net/?p=plocate;a=commitdiff_plain;h=e734063cbdc5064e215dab677988f5558de2a058 If stat() on a directory check, see if it's an excluded filesystem. Fixes an issues where a networked filesystem on the exclude list being down causes updatedb to abort entirely. Reported by Kevin Locke. --- diff --git a/updatedb.cpp b/updatedb.cpp index 4ead43f..188d3c2 100644 --- a/updatedb.cpp +++ b/updatedb.cpp @@ -713,6 +713,20 @@ int scan(const string &path, int fd, dev_t parent_dev, dir_time modified, dir_ti struct stat buf; if (fstat(e.fd, &buf) != 0) { + // It's possible that this is a filesystem that's excluded + // (and the failure is e.g. because the network is down). + // As a last-ditch effort, we try to check that before dying, + // i.e., duplicate the check from further down. + // + // It would be better to be able to run filesystem_is_excluded() + // for cheap on everything and just avoid the stat, but it seems + // hard to do that without any kind of raciness. + if (filesystem_is_excluded((path_plus_slash + e.name).c_str())) { + close(e.fd); + e.fd = -1; + continue; + } + perror((path_plus_slash + e.name).c_str()); exit(1); }