]> git.sesse.net Git - plocate/blobdiff - updatedb.cpp
In updatedb, check prunepaths _before_ opening the directory.
[plocate] / updatedb.cpp
index 812304bb6b8439cc835dc1ddd1bf7cb709e48445..3a3915969037bfd925f877c2e3a36a7b535bb635 100644 (file)
@@ -533,14 +533,6 @@ string ExistingDB::read_next_dictionary() const
 // Takes ownership of fd.
 int scan(const string &path, int fd, dev_t parent_dev, dir_time modified, dir_time db_modified, ExistingDB *existing_db, DatabaseReceiver *corpus, DictionaryBuilder *dict_builder)
 {
-       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);
-               return 0;
-       }
        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 */
@@ -697,6 +689,13 @@ int scan(const string &path, int fd, dev_t parent_dev, dir_time modified, dir_ti
                        }
                        continue;
                }
+               if (string_list_contains_dir_path(&conf_prunepaths, &conf_prunepaths_index, (path_plus_slash + e.name).c_str())) {
+                       if (conf_debug_pruning) {
+                               /* This is debugging output, don't mark anything for translation */
+                               fprintf(stderr, "Skipping `%s/%s': in prunepaths\n", path.c_str(), e.name.c_str());
+                       }
+                       continue;
+               }
 
                e.fd = opendir_noatime(fd, e.name.c_str());
                if (e.fd == -1) {