]> git.saurik.com Git - cydia.git/commitdiff
Quick detour to get Cydia Safe Mode working.
authorJay Freeman (saurik) <saurik@saurik.com>
Wed, 15 Oct 2008 08:31:39 +0000 (08:31 +0000)
committerJay Freeman (saurik) <saurik@saurik.com>
Thu, 30 Sep 2010 07:08:50 +0000 (07:08 +0000)
Cydia.app/Cydia
Cydia.mm

index f0c76fcc7e4ecfb3582e6ac9e68f693d87fb087e..8356734e0e133c76afbff68d4aec66ec7652b845 100755 (executable)
@@ -1,3 +1,5 @@
 #!/bin/bash
 Cydia=$(dirname "$0")
-exec "${Cydia}"/Cydia_ 2>>/tmp/cydia.log
+declare -a flags
+[[ :${DYLD_INSERT_LIBRARIES}: == */MobileSubstrate.dylib: ]] && flags[${#flags[@]}]=--substrate
+exec "${Cydia}"/Cydia_ "${flags[@]}" -- "$@" 2>>/tmp/cydia.log
index 0b92c4f37dd37d3e4fd841e7d2c7d2cd00eac302..be88a41f35fbff9e8264787e5f006c4a21b72a0e 100644 (file)
--- a/Cydia.mm
+++ b/Cydia.mm
@@ -7258,7 +7258,29 @@ id Dealloc_(id self, SEL selector) {
 }*/
 
 int main(int argc, char *argv[]) { _pooled
-    bootstrap_ = argc > 1 && strcmp(argv[1], "--bootstrap") == 0;
+    bool substrate(false);
+
+    if (argc != 0) {
+        char **args(argv);
+        int arge(1);
+
+        for (int argi(1); argi != argc; ++argi)
+            if (strcmp(argv[argi], "--") == 0) {
+                arge = argi;
+                argv[argi] = argv[0];
+                argv += argi;
+                argc -= argi;
+                break;
+            }
+
+        for (int argi(1); argi != arge; ++argi)
+            if (strcmp(args[argi], "--bootstrap") == 0)
+                bootstrap_ = true;
+            else if (strcmp(args[argi], "--substrate") == 0)
+                substrate = true;
+            else
+                fprintf(stderr, "unknown argument: %s\n", args[argi]);
+    }
 
     App_ = [[NSBundle mainBundle] bundlePath];
     Home_ = NSHomeDirectory();
@@ -7345,7 +7367,7 @@ int main(int argc, char *argv[]) { _pooled
     Documents_ = [[[NSMutableArray alloc] initWithCapacity:4] autorelease];
 #endif
 
-    if (access("/Library/MobileSubstrate/MobileSubstrate.dylib", F_OK) == 0)
+    if (substrate && access("/Library/MobileSubstrate/MobileSubstrate.dylib", F_OK) == 0)
         dlopen("/Library/MobileSubstrate/MobileSubstrate.dylib", RTLD_LAZY | RTLD_GLOBAL);
 
     if (access("/User", F_OK) != 0)