]> git.saurik.com Git - cycript.git/blobdiff - Trampoline.t.cpp
Get this all working really everywhere again, seriously this time.
[cycript.git] / Trampoline.t.cpp
index ad1f5156643b77a75f5eacefb634c690b3793843..6a87b5dfdd85bad78c3f123281883618ea88aefc 100644 (file)
@@ -46,6 +46,8 @@
 template <typename Type_>
 static _finline void dlset(Baton *baton, Type_ &function, const char *name, void *handle = RTLD_DEFAULT) {
     function = reinterpret_cast<Type_>(baton->dlsym(handle, name));
+    if (function == NULL)
+        baton->dlerror();
 }
 
 void *Routine(void *arg) {
@@ -54,14 +56,27 @@ void *Routine(void *arg) {
     void *(*dlopen)(const char *, int);
     dlset(baton, dlopen, "dlopen");
 
+    if (baton->dlsym(RTLD_DEFAULT, "JSEvaluateScript") == NULL)
+        dlopen("/System/Library/Frameworks/JavaScriptCore.framework/JavaScriptCore", RTLD_GLOBAL | RTLD_LAZY);
+
+    void *(*objc_getClass)(const char *);
+    dlset(baton, objc_getClass, "objc_getClass");
+
+    if (objc_getClass("WebUndefined") == NULL)
+        dlopen("/System/Library/Frameworks/WebKit.framework/WebKit", RTLD_GLOBAL | RTLD_LAZY);
+
     void *handle(dlopen(baton->library, RTLD_LAZY | RTLD_LOCAL));
+    if (handle == NULL) {
+        baton->dlerror();
+        return NULL;
+    }
 
     void (*CYHandleServer)(pid_t);
     dlset(baton, CYHandleServer, "CYHandleServer", handle);
 
     CYHandleServer(baton->pid);
 
-    return arg;
+    return NULL;
 }
 
 static void $bzero(void *data, size_t size) {