]> git.saurik.com Git - ldid.git/commitdiff
UnionFolder clobbered sub-paths in nested bundles.
authorJay Freeman (saurik) <saurik@saurik.com>
Thu, 28 Jul 2016 04:39:23 +0000 (21:39 -0700)
committerJay Freeman (saurik) <saurik@saurik.com>
Thu, 28 Jul 2016 05:00:47 +0000 (22:00 -0700)
ldid.cpp

index 14d1cef89955acc28313b7e0ec2d2f0d67d0daf7..4ac001256f4b106dbee79560db9fb463fc590856 100644 (file)
--- a/ldid.cpp
+++ b/ldid.cpp
@@ -1703,17 +1703,18 @@ bool UnionFolder::Open(const std::string &path, const Functor<void (std::streamb
 
 void UnionFolder::Find(const std::string &path, const Functor<void (const std::string &, const Functor<void (const Functor<void (std::streambuf &, std::streambuf &)> &)> &)> &code) {
     parent_.Find(path, fun([&](const std::string &name, const Functor<void (const Functor<void (std::streambuf &, std::streambuf &)> &)> &save) {
-        if (files_.find(name) == files_.end())
+        if (files_.find(path + name) == files_.end())
             code(name, save);
     }));
 
     for (auto &file : files_)
-        code(file.first, fun([&](const Functor<void (std::streambuf &, std::streambuf &)> &code) {
-            parent_.Save(file.first, fun([&](std::streambuf &save) {
-                file.second.pubseekpos(0, std::ios::in);
-                code(file.second, save);
+        if (file.first.size() >= path.size() && file.first.substr(0, path.size()) == path)
+            code(file.first.substr(path.size()), fun([&](const Functor<void (std::streambuf &, std::streambuf &)> &code) {
+                parent_.Save(file.first, fun([&](std::streambuf &save) {
+                    file.second.pubseekpos(0, std::ios::in);
+                    code(file.second, save);
+                }));
             }));
-        }));
 }
 
 #ifndef LDID_NOTOOLS