]> git.saurik.com Git - cydia.git/blobdiff - postinst.mm
Move CyteKit/RegEx.hpp #include to MobileCydia.mm.
[cydia.git] / postinst.mm
index 35c92b1ce04299c366647984457b0dec842a0b42..f826f4ff3c9ffdf5b138179dc1c533e512613aad 100644 (file)
@@ -1,3 +1,5 @@
+#include "CyteKit/UCPlatform.h"
+
 #include <dirent.h>
 #include <strings.h>
 
@@ -28,46 +30,52 @@ static bool setnsfpn(const char *path) {
     return system([[NSString stringWithFormat:@"/usr/libexec/cydia/setnsfpn %s", path] UTF8String]) == 0;
 }
 
-static bool MoveStash() {
+enum StashStatus {
+    StashDone,
+    StashFail,
+    StashGood,
+};
+
+static StashStatus MoveStash() {
     struct stat stat;
 
     if (lstat("/var/stash", &stat) == -1)
-        return errno == ENOENT;
+        return errno == ENOENT ? StashGood : StashFail;
     else if (S_ISLNK(stat.st_mode))
-        return true;
+        return StashGood;
     else if (!S_ISDIR(stat.st_mode))
-        return false;
+        return StashFail;
 
     if (lstat("/var/db/stash", &stat) == -1) {
         if (errno == ENOENT)
             goto move;
-        else return false;
+        else return StashFail;
     } else if (S_ISLNK(stat.st_mode))
         // XXX: this is fixable
-        return false;
+        return StashFail;
     else if (!S_ISDIR(stat.st_mode))
-        return false;
+        return StashFail;
     else {
         if (!setnsfpn("/var/db/stash"))
-            return false;
+            return StashFail;
         if (system("mv -t /var/stash /var/db/stash/*") != 0)
-            return false;
+            return StashFail;
         if (rmdir("/var/db/stash") == -1)
-            return false;
+            return StashFail;
     } move:
 
     if (!setnsfpn("/var/stash"))
-        return false;
+        return StashFail;
 
     if (rename("/var/stash", "/var/db/stash") == -1)
-        return false;
+        return StashFail;
     if (symlink("/var/db/stash", "/var/stash") != -1)
-        return true;
+        return StashDone;
     if (rename("/var/db/stash", "/var/stash") != -1)
-        return false;
+        return StashFail;
 
     fprintf(stderr, "/var/stash misplaced -- DO NOT REBOOT\n");
-    return false;
+    return StashFail;
 }
 
 static bool FixProtections() {
@@ -182,16 +190,18 @@ int main(int argc, const char *argv[]) {
     if (kCFCoreFoundationVersionNumber >= 1000) {
         if (!FixProtections())
             return 1;
-        if (MoveStash())
-            restart = true;
-        else {
-            fprintf(stderr, "failed to move stash\n");
-            return 1;
+        switch (MoveStash()) {
+            case StashDone:
+                restart = true;
+                break;
+            case StashFail:
+                fprintf(stderr, "failed to move stash\n");
+                return 1;
+            case StashGood:
+                break;
         }
     }
 
-    unlink("/etc/apt/sources.list.d/cydia.list");
-
     #define OldCache_ "/var/root/Library/Caches/com.saurik.Cydia"
     if (access(OldCache_, F_OK) == 0)
         system("rm -rf " OldCache_);
@@ -209,6 +219,15 @@ int main(int argc, const char *argv[]) {
 
     #define Cytore_ "/metadata.cb0"
 
+    #define CYDIA_LIST "/etc/apt/sources.list.d/cydia.list"
+    unlink(CYDIA_LIST);
+    [[NSString stringWithFormat:@
+        "deb http://apt.saurik.com/ ios/%.2f main\n"
+        "deb http://apt.thebigboss.org/repofiles/cydia/ stable main\n"
+        "deb http://cydia.zodttd.com/repo/cydia/ stable main\n"
+        "deb http://apt.modmyi.com/ stable main\n"
+    , kCFCoreFoundationVersionNumber] writeToFile:@ CYDIA_LIST atomically:YES];
+
     if (access(NewLibrary_ Cytore_, F_OK) != 0 && errno == ENOENT) {
         if (access(NewCache_ Cytore_, F_OK) == 0)
             system("mv -f " NewCache_ Cytore_ " " NewLibrary_);