]> git.saurik.com Git - ldid.git/commitdiff
Avoid duplicate Find when remapped during iterate.
authorJay Freeman (saurik) <saurik@saurik.com>
Sun, 12 Mar 2017 11:19:48 +0000 (04:19 -0700)
committerJay Freeman (saurik) <saurik@saurik.com>
Sun, 12 Mar 2017 11:19:48 +0000 (04:19 -0700)
ldid.cpp

index aefe7929eaec24d1fab53fa905ed5488370391ec..2b755f4b9409db07dfb934a38a18564fdce5ce8b 100644 (file)
--- a/ldid.cpp
+++ b/ldid.cpp
@@ -1888,14 +1888,6 @@ void UnionFolder::Open(const std::string &path, const Functor<void (std::streamb
 }
 
 void UnionFolder::Find(const std::string &path, const Functor<void (const std::string &)> &code, const Functor<void (const std::string &, const Functor<std::string ()> &)> &link) const {
-    parent_.Find(path, fun([&](const std::string &name) {
-        if (deletes_.find(path + name) == deletes_.end())
-            code(name);
-    }), fun([&](const std::string &name, const Functor<std::string ()> &read) {
-        if (deletes_.find(path + name) == deletes_.end())
-            link(name, read);
-    }));
-
     for (auto &reset : resets_)
         Map(path, code, reset.first, fun([&](const Functor<void (std::streambuf &, const void *)> &code) {
             auto &entry(reset.second);
@@ -1909,6 +1901,14 @@ void UnionFolder::Find(const std::string &path, const Functor<void (const std::s
                 code(data, flag);
             }));
         }));
+
+    parent_.Find(path, fun([&](const std::string &name) {
+        if (deletes_.find(path + name) == deletes_.end())
+            code(name);
+    }), fun([&](const std::string &name, const Functor<std::string ()> &read) {
+        if (deletes_.find(path + name) == deletes_.end())
+            link(name, read);
+    }));
 }
 
 #ifndef LDID_NOTOOLS