X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=updatedb.cpp;h=cfdd3afff0c8f0773f865065d8202ecea2d3f296;hb=HEAD;hp=812304bb6b8439cc835dc1ddd1bf7cb709e48445;hpb=a81eb2f2369de18d2376e266b36d2f32fff7600f;p=plocate diff --git a/updatedb.cpp b/updatedb.cpp index 812304b..cfdd3af 100644 --- a/updatedb.cpp +++ b/updatedb.cpp @@ -159,11 +159,10 @@ struct entry { dev_t dev; }; -bool filesystem_is_excluded(const char *path) +bool filesystem_is_excluded(const string &path) { if (conf_debug_pruning) { - /* This is debugging output, don't mark anything for translation */ - fprintf(stderr, "Checking whether filesystem `%s' is excluded:\n", path); + fprintf(stderr, "Checking whether filesystem `%s' is excluded:\n", path.c_str()); } FILE *f = setmntent("/proc/mounts", "r"); if (f == nullptr) { @@ -173,34 +172,24 @@ bool filesystem_is_excluded(const char *path) struct mntent *me; while ((me = getmntent(f)) != nullptr) { if (conf_debug_pruning) { - /* This is debugging output, don't mark anything for translation */ fprintf(stderr, " `%s', type `%s'\n", me->mnt_dir, me->mnt_type); } + if (path != me->mnt_dir) { + continue; + } string type(me->mnt_type); for (char &p : type) { p = toupper(p); } - if (find(conf_prunefs.begin(), conf_prunefs.end(), type) != conf_prunefs.end()) { - /* Paths in /proc/self/mounts contain no symbolic links. Besides - avoiding a few system calls, avoiding the realpath () avoids hangs - if the filesystem is unavailable hard-mounted NFS. */ - char *dir = me->mnt_dir; - if (conf_debug_pruning) { - /* This is debugging output, don't mark anything for translation */ - fprintf(stderr, " => type matches, dir `%s'\n", dir); - } - bool res = (strcmp(path, dir) == 0); - if (dir != me->mnt_dir) - free(dir); - if (res) { - endmntent(f); - return true; - } + bool exclude = (find(conf_prunefs.begin(), conf_prunefs.end(), type) != conf_prunefs.end()); + if (exclude && conf_debug_pruning) { + fprintf(stderr, " => excluded due to filesystem type\n"); } + endmntent(f); + return exclude; } if (conf_debug_pruning) { - /* This is debugging output, don't mark anything for translation */ - fprintf(stderr, "...done\n"); + fprintf(stderr, "...not found in mount list\n"); } endmntent(f); return false; @@ -535,7 +524,6 @@ int scan(const string &path, int fd, dev_t parent_dev, dir_time modified, dir_ti { if (string_list_contains_dir_path(&conf_prunepaths, &conf_prunepaths_index, path)) { if (conf_debug_pruning) { - /* This is debugging output, don't mark anything for translation */ fprintf(stderr, "Skipping `%s': in prunepaths\n", path.c_str()); } close(fd); @@ -543,7 +531,6 @@ int scan(const string &path, int fd, dev_t parent_dev, dir_time modified, dir_ti } if (conf_prune_bind_mounts && is_bind_mount(path.c_str())) { if (conf_debug_pruning) { - /* This is debugging output, don't mark anything for translation */ fprintf(stderr, "Skipping `%s': bind mount\n", path.c_str()); } close(fd); @@ -692,7 +679,6 @@ int scan(const string &path, int fd, dev_t parent_dev, dir_time modified, dir_ti if (find(conf_prunenames.begin(), conf_prunenames.end(), e.name) != conf_prunenames.end()) { if (conf_debug_pruning) { - /* This is debugging output, don't mark anything for translation */ fprintf(stderr, "Skipping `%s': in prunenames\n", e.name.c_str()); } continue; @@ -726,7 +712,7 @@ int scan(const string &path, int fd, dev_t parent_dev, dir_time modified, dir_ti // 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())) { + if (filesystem_is_excluded(path_plus_slash + e.name)) { close(e.fd); e.fd = -1; continue; @@ -738,7 +724,7 @@ int scan(const string &path, int fd, dev_t parent_dev, dir_time modified, dir_ti e.dev = buf.st_dev; if (buf.st_dev != parent_dev) { - if (filesystem_is_excluded((path_plus_slash + e.name).c_str())) { + if (filesystem_is_excluded(path_plus_slash + e.name)) { close(e.fd); e.fd = -1; continue; @@ -797,7 +783,7 @@ int main(int argc, char **argv) conf_prepare(argc, argv); if (conf_prune_bind_mounts) { - bind_mount_init(MOUNTINFO_PATH); + bind_mount_init(); } int fd = open(conf_output.c_str(), O_RDONLY);