summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Freeman (saurik) <saurik@saurik.com>2017-03-12 04:19:48 -0700
committerJay Freeman (saurik) <saurik@saurik.com>2017-03-12 04:19:48 -0700
commit66f2305d57b04ba04018f98f91494cd4dabd1249 (patch)
tree25a6d4328af261cc5ba013c8d5b72b3a20c39923
parentd58cc49d0ec0f1c1862b0476c6a28391815df5aa (diff)
downloadldid-66f2305d57b04ba04018f98f91494cd4dabd1249.tar.gz
ldid-66f2305d57b04ba04018f98f91494cd4dabd1249.tar.zst
ldid-66f2305d57b04ba04018f98f91494cd4dabd1249.zip
Avoid duplicate Find when remapped during iterate.
-rw-r--r--ldid.cpp16
1 files changed, 8 insertions, 8 deletions
diff --git a/ldid.cpp b/ldid.cpp
index aefe792..2b755f4 100644
--- 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