]> git.saurik.com Git - cycript.git/blobdiff - Console.cpp
Merge adapter into callback, removing indirection.
[cycript.git] / Console.cpp
index 2b68eddeed2ec07106383cb3fca261fd54e8bad1..9e84912f8a9b2b6e6d8b2bbd674fe1ac6b14338b 100644 (file)
@@ -1,21 +1,21 @@
 /* Cycript - Optimizing JavaScript Compiler/Runtime
- * Copyright (C) 2009-2013  Jay Freeman (saurik)
+ * Copyright (C) 2009-2015  Jay Freeman (saurik)
 */
 
-/* GNU General Public License, Version 3 {{{ */
+/* GNU Affero General Public License, Version 3 {{{ */
 /*
- * Cycript is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * Cycript is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Cycript.  If not, see <http://www.gnu.org/licenses/>.
+ * GNU Affero General Public License for more details.
+
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 **/
 /* }}} */
 
@@ -418,15 +418,18 @@ class History {
 };
 
 static void Console(CYOptions &options) {
-    CYPool pool;
-
-    passwd *passwd;
-    if (const char *username = getenv("LOGNAME"))
-        passwd = getpwnam(username);
-    else
-        passwd = getpwuid(getuid());
+    std::string basedir;
+    if (const char *home = getenv("HOME"))
+        basedir = home;
+    else {
+        passwd *passwd;
+        if (const char *username = getenv("LOGNAME"))
+            passwd = getpwnam(username);
+        else
+            passwd = getpwuid(getuid());
+        basedir = passwd->pw_dir;
+    }
 
-    std::string basedir(passwd->pw_dir);
     basedir += "/.cycript";
     mkdir(basedir.c_str(), 0700);
 
@@ -550,9 +553,9 @@ static void Console(CYOptions &options) {
 
             if (parser.parse() != 0 || !driver.errors_.empty()) {
                 for (CYDriver::Errors::const_iterator error(driver.errors_.begin()); error != driver.errors_.end(); ++error) {
-                    cy::position begin(error->location_.begin);
+                    CYPosition begin(error->location_.begin);
                     if (begin.line != lines.size() || begin.column < lines.back().size() || error->warning_) {
-                        cy::position end(error->location_.end);
+                        CYPosition end(error->location_.end);
 
                         if (begin.line != lines.size()) {
                             std::cerr << "  | ";
@@ -605,7 +608,7 @@ static void Console(CYOptions &options) {
     }
 }
 
-void InjectLibrary(pid_t pid);
+void InjectLibrary(pid_t, int, const char *[]);
 
 int Main(int argc, char * const argv[], char const * const envp[]) {
     bool tty(isatty(STDIN_FILENO));
@@ -833,7 +836,14 @@ int Main(int argc, char * const argv[], char const * const envp[]) {
         memset(&address, 0, sizeof(address));
         address.sun_family = AF_UNIX;
 
-        sprintf(address.sun_path, "/tmp/.s.cy.%u", getpid());
+        const char *tmp;
+#if defined(__APPLE__) && (defined(__arm__) || defined(__arm64__))
+        tmp = "/Library/Caches";
+#else
+        tmp = "/tmp";
+#endif
+
+        sprintf(address.sun_path, "%s/.s.cy.%u", tmp, getpid());
         unlink(address.sun_path);
 
         struct File {
@@ -853,7 +863,7 @@ int Main(int argc, char * const argv[], char const * const envp[]) {
         _syscall(chmod(address.sun_path, 0777));
 
         _syscall(listen(server, 1));
-        InjectLibrary(pid);
+        InjectLibrary(pid, 1, (const char *[]) {address.sun_path, NULL});
         client_ = _syscall(accept(server, NULL, NULL));
     }
 #else