]> git.saurik.com Git - cydia.git/blobdiff - postinst.mm
Allow user to select a specific candidate version.
[cydia.git] / postinst.mm
index e5658d2a8ae4ed403a205c02beab263f0b2a8b4d..a204b81b50915160a1de7d8ae8e00330a4734d7f 100644 (file)
@@ -71,16 +71,10 @@ static bool MoveStash() {
 }
 
 static bool FixProtections() {
-    for (const char *path : (const char *[]) {"/var/lib", "/var/cache"}) {
-        mkdir(path, 0755);
-        if (!setnsfpn(path)) {
-            fprintf(stderr, "failed to setnsfpn %s\n", path);
-            return false;
-        }
-    }
-
-    if (!MoveStash()) {
-        fprintf(stderr, "failed to move stash\n");
+    const char *path("/var/lib");
+    mkdir(path, 0755);
+    if (!setnsfpn(path)) {
+        fprintf(stderr, "failed to setnsfpn %s\n", path);
         return false;
     }
 
@@ -177,60 +171,34 @@ static bool FixApplications() {
     }
 }
 
-_H<NSMutableDictionary> Sources_;
-bool Changed_;
-
-_H<NSString> System_;
-
 int main(int argc, const char *argv[]) {
     if (argc < 2 || strcmp(argv[1], "configure") != 0)
         return 0;
 
     NSAutoreleasePool *pool([[NSAutoreleasePool alloc] init]);
 
-    if (kCFCoreFoundationVersionNumber >= 1000)
+    bool restart(false);
+
+    if (kCFCoreFoundationVersionNumber >= 1000) {
         if (!FixProtections())
             return 1;
-
-    size_t size;
-    sysctlbyname("kern.osversion", NULL, &size, NULL, 0);
-    char *osversion = new char[size];
-    if (sysctlbyname("kern.osversion", osversion, &size, NULL, 0) != -1)
-        System_ = [NSString stringWithUTF8String:osversion];
-
-    NSDictionary *metadata([[[NSMutableDictionary alloc] initWithContentsOfFile:@"/var/lib/cydia/metadata.plist"] autorelease]);
-    NSUInteger version(0);
-
-    if (metadata != nil) {
-        Sources_ = [metadata objectForKey:@"Sources"];
-
-        if (NSNumber *number = [metadata objectForKey:@"Version"])
-            version = [number unsignedIntValue];
-    }
-
-    if (Sources_ == nil)
-        Sources_ = [NSMutableDictionary dictionaryWithCapacity:8];
-
-    if (version == 0) {
-        CydiaAddSource(@"http://apt.thebigboss.org/repofiles/cydia/", @"stable", [NSMutableArray arrayWithObject:@"main"]);
-        CydiaAddSource(@"http://apt.modmyi.com/", @"stable", [NSMutableArray arrayWithObject:@"main"]);
-        CydiaAddSource(@"http://cydia.zodttd.com/repo/cydia/", @"stable", [NSMutableArray arrayWithObject:@"main"]);
-        CydiaAddSource(@"http://repo666.ultrasn0w.com/", @"./");
+        if (MoveStash())
+            restart = true;
+        else {
+            fprintf(stderr, "failed to move stash\n");
+            return 1;
+        }
     }
 
-    CydiaWriteSources();
-
     #define OldCache_ "/var/root/Library/Caches/com.saurik.Cydia"
     if (access(OldCache_, F_OK) == 0)
         system("rm -rf " OldCache_);
 
     #define NewCache_ "/var/mobile/Library/Caches/com.saurik.Cydia"
     system("cd /; su -c 'mkdir -p " NewCache_ "' mobile");
-
-    if (access(NewCache_ "/lists", F_OK) != 0 && errno == ENOENT) {
+    if (access(NewCache_ "/lists", F_OK) != 0 && errno == ENOENT)
         system("cp -at " NewCache_ " /var/lib/apt/lists");
-        system("chown -R 501.501 " NewCache_ "/lists");
-    }
+    system("chown -R 501.501 " NewCache_);
 
     #define OldLibrary_ "/var/lib/cydia"
 
@@ -239,6 +207,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_);
@@ -249,7 +226,9 @@ int main(int argc, const char *argv[]) {
 
     FixPermissions();
 
-    if (FixApplications())
+    restart |= FixApplications();
+
+    if (restart)
         Finish("restart");
 
     [pool release];