]> git.saurik.com Git - cydia.git/commitdiff
Fixed FW_LEAST and added 'exec' for Installer compatibility.
authorJay Freeman (saurik) <saurik@saurk.com>
Wed, 5 Mar 2008 03:34:00 +0000 (03:34 +0000)
committerJay Freeman (saurik) <saurik@saurk.com>
Wed, 5 Mar 2008 03:34:00 +0000 (03:34 +0000)
Cydia.mm
exec.mm [new file with mode: 0644]
makefile

index c24ec4216ee4cbbc9c2820e0c8e6bfa7d1c92500..d2211780f71abe4526c2396570a206483bc2c159 100644 (file)
--- a/Cydia.mm
+++ b/Cydia.mm
@@ -184,9 +184,9 @@ unsigned Minor_;
 unsigned BugFix_;
 
 #define FW_LEAST(major, minor, bugfix) \
-    (major > Major_ || major == Major_ && \
-        (minor > Minor_ || minor == Minor_ && \
-            bugfix >= BugFix_))
+    (major < Major_ || major == Major_ && \
+        (minor < Minor_ || minor == Minor_ && \
+            bugfix <= BugFix_))
 
 bool bootstrap_ = false;
 
@@ -3701,8 +3701,8 @@ int main(int argc, char *argv[]) {
             NSArray *versions = [prover componentsSeparatedByString:@"."];
             int count = [versions count];
             Major_ = count > 0 ? [[versions objectAtIndex:0] intValue] : 0;
-            Minor_ = count > 1 ? [[versions objectAtIndex:0] intValue] : 0;
-            BugFix_ = count > 2 ? [[versions objectAtIndex:0] intValue] : 0;
+            Minor_ = count > 1 ? [[versions objectAtIndex:1] intValue] : 0;
+            BugFix_ = count > 2 ? [[versions objectAtIndex:2] intValue] : 0;
         }
     }
 
diff --git a/exec.mm b/exec.mm
new file mode 100644 (file)
index 0000000..751a84a
--- /dev/null
+++ b/exec.mm
@@ -0,0 +1,66 @@
+#include <Foundation/Foundation.h>
+#include <CoreFoundation/CoreFoundation.h>
+
+#include <sys/types.h>
+#include <pwd.h>
+#include <unistd.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+const char *Firmware_ = NULL;
+
+unsigned Major_;
+unsigned Minor_;
+unsigned BugFix_;
+
+#define FW_LEAST(major, minor, bugfix) \
+    (major < Major_ || major == Major_ && \
+        (minor < Minor_ || minor == Minor_ && \
+            bugfix <= BugFix_))
+
+int main(int argc, char *argv[]) {
+    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+
+    if (NSDictionary *sysver = [NSDictionary dictionaryWithContentsOfFile:@"/System/Library/CoreServices/SystemVersion.plist"]) {
+        if (NSString *prover = [sysver valueForKey:@"ProductVersion"]) {
+            Firmware_ = strdup([prover cString]);
+            NSArray *versions = [prover componentsSeparatedByString:@"."];
+            int count = [versions count];
+            Major_ = count > 0 ? [[versions objectAtIndex:0] intValue] : 0;
+            Minor_ = count > 1 ? [[versions objectAtIndex:1] intValue] : 0;
+            BugFix_ = count > 2 ? [[versions objectAtIndex:2] intValue] : 0;
+        }
+    }
+
+    [pool release];
+
+    const char *user;
+    if (FW_LEAST(1,1,3))
+        user = "mobile";
+    else
+        user = "root";
+
+    if (argc == 1)
+        printf("%s\n", user);
+    else {
+        struct passwd *passwd = getpwnam(user);
+
+        if (setreuid(passwd->pw_uid, 0) == -1) {
+            perror("setreuid");
+            exit(1);
+        }
+
+        if (setregid(passwd->pw_gid, 0) == -1) {
+            perror("setregid");
+            exit(1);
+        }
+
+        if (execvp(argv[1], argv + 1) == -1) {
+            perror("execvp");
+            exit(1);
+        }
+    }
+
+    return 0;
+}
index ad0db8a75f192eba0d81c4767af559bf070be08d..76093baf8d1b28a252a32c6c540fc766b6480282 100644 (file)
--- a/makefile
+++ b/makefile
@@ -1,10 +1,13 @@
 iPhone := 192.168.1.100
 
-all: Cydia
+all: Cydia exec
 
 test: all
        scp -p Cydia saurik@$(iPhone):/dat
        ssh saurik@$(iPhone) /dat/Cydia
 
-Cydia: *.mm *.h makefile
+exec: exec.mm makefile
+       arm-apple-darwin-g++ -Wall -Werror -o $@ $< -framework Foundation -framework CoreFoundation -lobjc
+
+Cydia: Cydia.mm *.h makefile
        arm-apple-darwin-g++ -fobjc-call-cxx-cdtors -g3 -O2 -Wall -Werror -o $@ $< -framework UIKit -framework IOKit -framework Foundation -framework CoreFoundation -framework CoreGraphics -framework GraphicsServices -lobjc -lapt-pkg -lpcre -fobjc-exceptions