summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJay Freeman (saurik) <saurik@saurik.com>2010-08-04 05:43:05 +0000
committerJay Freeman (saurik) <saurik@saurik.com>2010-08-04 05:43:05 +0000
commit04ee9f372e9a9d91accf5ffedf6bafebfd9cdadd (patch)
treeb7bf9e017e1fc7b895ef45c3d14fdab371f8810b
parent916744716282b757f299a1c0c3bc97d6239e5924 (diff)
Sometimes, the capabilities aren't ready yet.
-rw-r--r--control2
-rw-r--r--gssc.mm43
2 files changed, 37 insertions, 8 deletions
diff --git a/control b/control
index a91f06c..5f7c6b5 100644
--- a/control
+++ b/control
@@ -4,7 +4,7 @@ Section: Utilities
Installed-Size: %S
Maintainer: Jay Freeman (saurik) <saurik@saurik.com>
Architecture: iphoneos-arm
-Version: 1.0.3201-1
+Version: 1.0.3227-1
Description: UIKit/GraphicsServices command line access
Name: UIKit Tools
Author: Jay Freeman (saurik) <saurik@saurik.com>
diff --git a/gssc.mm b/gssc.mm
index 0c40ed5..4932174 100644
--- a/gssc.mm
+++ b/gssc.mm
@@ -6,6 +6,16 @@
static CFArrayRef (*$GSSystemCopyCapability)(CFStringRef);
static CFArrayRef (*$GSSystemGetCapability)(CFStringRef);
+void OnGSCapabilityChanged(
+ CFNotificationCenterRef center,
+ void *observer,
+ CFStringRef name,
+ const void *object,
+ CFDictionaryRef info
+) {
+ CFRunLoopStop(CFRunLoopGetCurrent());
+}
+
int main(int argc, char *argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
@@ -21,15 +31,34 @@ int main(int argc, char *argv[]) {
$GSSystemCopyCapability = reinterpret_cast<CFArrayRef (*)(CFStringRef)>(dlsym(RTLD_DEFAULT, "GSSystemCopyCapability"));
$GSSystemGetCapability = reinterpret_cast<CFArrayRef (*)(CFStringRef)>(dlsym(RTLD_DEFAULT, "GSSystemGetCapability"));
+ CFNotificationCenterAddObserver(
+ CFNotificationCenterGetDarwinNotifyCenter(),
+ NULL,
+ &OnGSCapabilityChanged,
+ CFSTR("GSCapabilitiesChanged"),
+ NULL,
+ NULL
+ );
+
const NSArray *capability;
- if ($GSSystemCopyCapability != NULL) {
- capability = reinterpret_cast<const NSArray *>((*$GSSystemCopyCapability)(reinterpret_cast<CFStringRef>(name)));
- capability = [capability autorelease];
- } else if ($GSSystemGetCapability != NULL) {
- capability = reinterpret_cast<const NSArray *>((*$GSSystemGetCapability)(reinterpret_cast<CFStringRef>(name)));
- } else
- capability = nil;
+ for (;;) {
+ if ($GSSystemCopyCapability != NULL) {
+ capability = reinterpret_cast<const NSArray *>((*$GSSystemCopyCapability)(reinterpret_cast<CFStringRef>(name)));
+ if (capability != nil)
+ capability = [capability autorelease];
+ } else if ($GSSystemGetCapability != NULL) {
+ capability = reinterpret_cast<const NSArray *>((*$GSSystemGetCapability)(reinterpret_cast<CFStringRef>(name)));
+ } else {
+ capability = nil;
+ break;
+ }
+
+ if (capability != nil)
+ break;
+
+ CFRunLoopRun();
+ }
NSLog(@"%@", capability);