diff options
author | Jay Freeman (saurik) <saurik@saurik.com> | 2010-08-04 05:43:05 +0000 |
---|---|---|
committer | Jay Freeman (saurik) <saurik@saurik.com> | 2010-08-04 05:43:05 +0000 |
commit | 04ee9f372e9a9d91accf5ffedf6bafebfd9cdadd (patch) | |
tree | b7bf9e017e1fc7b895ef45c3d14fdab371f8810b | |
parent | 916744716282b757f299a1c0c3bc97d6239e5924 (diff) |
Sometimes, the capabilities aren't ready yet.
-rw-r--r-- | control | 2 | ||||
-rw-r--r-- | gssc.mm | 43 |
2 files changed, 37 insertions, 8 deletions
@@ -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> @@ -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); |