]> git.saurik.com Git - ldid.git/commitdiff
Chop bool Open() into void Open() and bool Look().
authorJay Freeman (saurik) <saurik@saurik.com>
Fri, 26 Aug 2016 05:06:33 +0000 (22:06 -0700)
committerJay Freeman (saurik) <saurik@saurik.com>
Fri, 26 Aug 2016 05:06:33 +0000 (22:06 -0700)
ldid.cpp
ldid.hpp

index 21e886349a38fb37e1c1ae706a26ac3a77adf406..91bf04c2237bdbcf1e8a8ff1cedfd825cc914259 100644 (file)
--- a/ldid.cpp
+++ b/ldid.cpp
@@ -1749,12 +1749,12 @@ void DiskFolder::Find(const std::string &root, const std::string &base, const Fu
         else
             code(base + name, fun([&](const Functor<void (std::streambuf &, std::streambuf &)> &code) {
                 std::string access(root + base + name);
-                _assert_(Open(access, fun([&](std::streambuf &data, const void *flag) {
+                Open(access, fun([&](std::streambuf &data, const void *flag) {
                     auto from(path + name);
                     std::filebuf save;
                     commit_[from] = Temporary(save, from);
                     code(data, save);
-                })), "open(): %s", access.c_str());
+                }));
             }));
     }
 }
@@ -1766,14 +1766,15 @@ void DiskFolder::Save(const std::string &path, const void *flag, const Functor<v
     code(save);
 }
 
-bool DiskFolder::Open(const std::string &path, const Functor<void (std::streambuf &, const void *)> &code) {
+bool DiskFolder::Look(const std::string &path) {
+    return _syscall(access(Path(path).c_str(), R_OK), ENOENT) == 0;
+}
+
+void DiskFolder::Open(const std::string &path, const Functor<void (std::streambuf &, const void *)> &code) {
     std::filebuf data;
     auto result(data.open(Path(path).c_str(), std::ios::binary | std::ios::in));
-    if (result == NULL)
-        return false;
-    _assert(result == &data);
+    _assert_(result == &data, "DiskFolder::Open(%s)", path.c_str());
     code(data, NULL);
-    return true;
 }
 
 void DiskFolder::Find(const std::string &path, const Functor<void (const std::string &, const Functor<void (const Functor<void (std::streambuf &, std::streambuf &)> &)> &)> &code, const Functor<void (const std::string &, const Functor<std::string ()> &)> &link) {
@@ -1791,7 +1792,11 @@ void SubFolder::Save(const std::string &path, const void *flag, const Functor<vo
     return parent_.Save(path_ + path, flag, code);
 }
 
-bool SubFolder::Open(const std::string &path, const Functor<void (std::streambuf &, const void *)> &code) {
+bool SubFolder::Look(const std::string &path) {
+    return parent_.Look(path_ + path);
+}
+
+void SubFolder::Open(const std::string &path, const Functor<void (std::streambuf &, const void *)> &code) {
     return parent_.Open(path_ + path, code);
 }
 
@@ -1826,7 +1831,14 @@ void UnionFolder::Save(const std::string &path, const void *flag, const Functor<
     return parent_.Save(Map(path), flag, code);
 }
 
-bool UnionFolder::Open(const std::string &path, const Functor<void (std::streambuf &, const void *)> &code) {
+bool UnionFolder::Look(const std::string &path) {
+    auto file(resets_.find(path));
+    if (file != resets_.end())
+        return true;
+    return parent_.Look(Map(path));
+}
+
+void UnionFolder::Open(const std::string &path, const Functor<void (std::streambuf &, const void *)> &code) {
     auto file(resets_.find(path));
     if (file == resets_.end())
         return parent_.Open(Map(path), code);
@@ -1835,7 +1847,6 @@ bool UnionFolder::Open(const std::string &path, const Functor<void (std::streamb
     auto &data(entry.first);
     data.pubseekpos(0, std::ios::in);
     code(data, entry.second);
-    return true;
 }
 
 void UnionFolder::Find(const std::string &path, const Functor<void (const std::string &, const Functor<void (const Functor<void (std::streambuf &, std::streambuf &)> &)> &)> &code, const Functor<void (const std::string &, const Functor<std::string ()> &)> &link) {
@@ -1999,12 +2010,12 @@ std::string Bundle(const std::string &root, Folder &folder, const std::string &k
 
     static const std::string info("Info.plist");
 
-    _assert_(folder.Open(info, fun([&](std::streambuf &buffer, const void *flag) {
+    folder.Open(info, fun([&](std::streambuf &buffer, const void *flag) {
         plist_d(buffer, fun([&](plist_t node) {
             executable = plist_s(plist_dict_get_item(node, "CFBundleExecutable"));
             identifier = plist_s(plist_dict_get_item(node, "CFBundleIdentifier"));
         }));
-    })), "open(): Info.plist");
+    }));
 
     static const std::string directory("_CodeSignature/");
     static const std::string signature(directory + "CodeResources");
@@ -2014,12 +2025,6 @@ std::string Bundle(const std::string &root, Folder &folder, const std::string &k
     auto &rules1(versions[""]);
     auto &rules2(versions["2"]);
 
-    folder.Open(signature, fun([&](std::streambuf &buffer, const void *) {
-        plist_d(buffer, fun([&](plist_t node) {
-            // XXX: maybe attempt to preserve existing rules
-        }));
-    }));
-
     if (true) {
         rules1.insert(Rule{1, NoMode, "^"});
         rules1.insert(Rule{10000, OmitMode, "^(Frameworks/[^/]+\\.framework/|PlugIns/[^/]+\\.appex/|PlugIns/[^/]+\\.appex/Frameworks/[^/]+\\.framework/|())SC_Info/[^/]+\\.(sinf|supf|supp)$"});
index 3765c9f66729a3f58f9995499732bc7f127d3365..55c50ea9894f36c633965fe218fd1c9b86e778f7 100644 (file)
--- a/ldid.hpp
+++ b/ldid.hpp
@@ -50,7 +50,8 @@ FunctorImpl<decltype(&Function_::operator())> fun(const Function_ &value) {
 class Folder {
   public:
     virtual void Save(const std::string &path, const void *flag, const Functor<void (std::streambuf &)> &code) = 0;
-    virtual bool Open(const std::string &path, const Functor<void (std::streambuf &, const void *)> &code) = 0;
+    virtual bool Look(const std::string &path) = 0;
+    virtual void Open(const std::string &path, const Functor<void (std::streambuf &, const void *)> &code) = 0;
     virtual void Find(const std::string &path, const Functor<void (const std::string &, const Functor<void (const Functor<void (std::streambuf &, std::streambuf &)> &)> &)> &code, const Functor<void (const std::string &, const Functor<std::string ()> &)> &link) = 0;
 };
 
@@ -70,7 +71,8 @@ class DiskFolder :
     ~DiskFolder();
 
     virtual void Save(const std::string &path, const void *flag, const Functor<void (std::streambuf &)> &code);
-    virtual bool Open(const std::string &path, const Functor<void (std::streambuf &, const void *)> &code);
+    virtual bool Look(const std::string &path);
+    virtual void Open(const std::string &path, const Functor<void (std::streambuf &, const void *)> &code);
     virtual void Find(const std::string &path, const Functor<void (const std::string &, const Functor<void (const Functor<void (std::streambuf &, std::streambuf &)> &)> &)> &code, const Functor<void (const std::string &, const Functor<std::string ()> &)> &link);
 };
 
@@ -85,7 +87,8 @@ class SubFolder :
     SubFolder(Folder &parent, const std::string &path);
 
     virtual void Save(const std::string &path, const void *flag, const Functor<void (std::streambuf &)> &code);
-    virtual bool Open(const std::string &path, const Functor<void (std::streambuf &, const void *)> &code);
+    virtual bool Look(const std::string &path);
+    virtual void Open(const std::string &path, const Functor<void (std::streambuf &, const void *)> &code);
     virtual void Find(const std::string &path, const Functor<void (const std::string &, const Functor<void (const Functor<void (std::streambuf &, std::streambuf &)> &)> &)> &code, const Functor<void (const std::string &, const Functor<std::string ()> &)> &link);
 };
 
@@ -119,7 +122,8 @@ class UnionFolder :
     UnionFolder(Folder &parent);
 
     virtual void Save(const std::string &path, const void *flag, const Functor<void (std::streambuf &)> &code);
-    virtual bool Open(const std::string &path, const Functor<void (std::streambuf &, const void *)> &code);
+    virtual bool Look(const std::string &path);
+    virtual void Open(const std::string &path, const Functor<void (std::streambuf &, const void *)> &code);
     virtual void Find(const std::string &path, const Functor<void (const std::string &, const Functor<void (const Functor<void (std::streambuf &, std::streambuf &)> &)> &)> &code, const Functor<void (const std::string &, const Functor<std::string ()> &)> &link);
 
     void operator ()(const std::string &from) {