]> git.saurik.com Git - cycript.git/blobdiff - Handler.cpp
Use pool.atexit to free Objective-C "list copies".
[cycript.git] / Handler.cpp
index d048d83f60bade37e25b05bcecf7f0dd7fdca5bb..da458d6e7bb5ca4fedc4e3a8ebe92ed00c5fc98e 100644 (file)
@@ -1,5 +1,5 @@
-/* Cycript - Optimizing JavaScript Compiler/Runtime
- * Copyright (C) 2009-2015  Jay Freeman (saurik)
+/* Cycript - The Truly Universal Scripting Language
+ * Copyright (C) 2009-2016  Jay Freeman (saurik)
 */
 
 /* GNU Affero General Public License, Version 3 {{{ */
 */
 
 /* GNU Affero General Public License, Version 3 {{{ */
@@ -19,6 +19,8 @@
 **/
 /* }}} */
 
 **/
 /* }}} */
 
+#include "cycript.hpp"
+
 #include <dlfcn.h>
 #include <pthread.h>
 #include <unistd.h>
 #include <dlfcn.h>
 #include <pthread.h>
 #include <unistd.h>
 #include <CoreFoundation/CoreFoundation.h>
 #endif
 
 #include <CoreFoundation/CoreFoundation.h>
 #endif
 
-#include "cycript.hpp"
-
+#include "Driver.hpp"
 #include "JavaScript.hpp"
 #include "JavaScript.hpp"
-#include "Parser.hpp"
+#include "Syntax.hpp"
 #include "Pooling.hpp"
 
 #include "Pooling.hpp"
 
-#include "Cycript.tab.hh"
-#include "Driver.hpp"
-
 struct CYExecute_ {
     CYPool &pool_;
     const char * volatile data_;
 struct CYExecute_ {
     CYPool &pool_;
     const char * volatile data_;
@@ -168,7 +166,7 @@ static void CYHandleSocket(const char *path) {
     address.sun_family = AF_UNIX;
     strcpy(address.sun_path, path);
 
     address.sun_family = AF_UNIX;
     strcpy(address.sun_path, path);
 
-    _syscall(connect(socket, reinterpret_cast<sockaddr *>(&address), SUN_LEN(&address)));
+    _syscall(connect(socket, reinterpret_cast<sockaddr *>(&address), sizeof(address)));
 
     CYInitializeDynamic();
     CYHandleClient(socket);
 
     CYInitializeDynamic();
     CYHandleClient(socket);
@@ -191,7 +189,11 @@ _extern char *MSmain0(int argc, char *argv[]) { try {
     if (handle == NULL) {
         Dl_info info;
         _assert(dladdr(reinterpret_cast<void *>(&MSmain0), &info) != 0);
     if (handle == NULL) {
         Dl_info info;
         _assert(dladdr(reinterpret_cast<void *>(&MSmain0), &info) != 0);
+#ifdef __ANDROID__
+        handle = dlopen(info.dli_fname, 0);
+#else
         handle = dlopen(info.dli_fname, RTLD_NOLOAD);
         handle = dlopen(info.dli_fname, RTLD_NOLOAD);
+#endif
     }
 
     return NULL;
     }
 
     return NULL;