]> git.saurik.com Git - cycript.git/blobdiff - Library.cpp
Switch from __thread to pthread_[gs]etspecific().
[cycript.git] / Library.cpp
index 610e11b97868bf3b95ed7fa94c0176da57e07bcb..48ad71f4e434d4e69c72c3b70227ff4dddbb7c81 100644 (file)
@@ -43,7 +43,6 @@
 #include "cycript.hpp"
 
 #include "Pooling.hpp"
-#include "Context.hpp"
 
 #include <sys/mman.h>
 
@@ -60,6 +59,7 @@
 
 #include "Error.hpp"
 #include "String.hpp"
+#include "Execute.hpp"
 
 /* C Strings {{{ */
 template <typename Type_>
@@ -240,11 +240,13 @@ double CYCastDouble(const char *value) {
     return CYCastDouble(value, strlen(value));
 }
 
-extern "C" void CydgetPoolParse(apr_pool_t *pool, const uint16_t **data, size_t *size) {
-    CYDriver driver("");
+extern "C" void CydgetPoolParse(apr_pool_t *remote, const uint16_t **data, size_t *size) {
+    CYLocalPool local;
+
+    CYDriver driver;
     cy::parser parser(driver);
 
-    CYUTF8String utf8(CYPoolUTF8String(pool, CYUTF16String(*data, *size)));
+    CYUTF8String utf8(CYPoolUTF8String(local, CYUTF16String(*data, *size)));
 
     driver.data_ = utf8.data;
     driver.size_ = utf8.size;
@@ -253,14 +255,14 @@ extern "C" void CydgetPoolParse(apr_pool_t *pool, const uint16_t **data, size_t
         return;
 
     CYOptions options;
-    CYContext context(driver.pool_, options);
+    CYContext context(options);
     driver.program_->Replace(context);
     std::ostringstream str;
     CYOutput out(str, options);
     out << *driver.program_;
     std::string code(str.str());
 
-    CYUTF16String utf16(CYPoolUTF16String(pool, CYUTF8String(code.c_str(), code.size())));
+    CYUTF16String utf16(CYPoolUTF16String(remote, CYUTF8String(code.c_str(), code.size())));
 
     *data = utf16.data;
     *size = utf16.size;