From 04ee9f372e9a9d91accf5ffedf6bafebfd9cdadd Mon Sep 17 00:00:00 2001 From: "Jay Freeman (saurik)" Date: Wed, 4 Aug 2010 05:43:05 +0000 Subject: Sometimes, the capabilities aren't ready yet. --- gssc.mm | 43 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 7 deletions(-) (limited to 'gssc.mm') 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(dlsym(RTLD_DEFAULT, "GSSystemCopyCapability")); $GSSystemGetCapability = reinterpret_cast(dlsym(RTLD_DEFAULT, "GSSystemGetCapability")); + CFNotificationCenterAddObserver( + CFNotificationCenterGetDarwinNotifyCenter(), + NULL, + &OnGSCapabilityChanged, + CFSTR("GSCapabilitiesChanged"), + NULL, + NULL + ); + const NSArray *capability; - if ($GSSystemCopyCapability != NULL) { - capability = reinterpret_cast((*$GSSystemCopyCapability)(reinterpret_cast(name))); - capability = [capability autorelease]; - } else if ($GSSystemGetCapability != NULL) { - capability = reinterpret_cast((*$GSSystemGetCapability)(reinterpret_cast(name))); - } else - capability = nil; + for (;;) { + if ($GSSystemCopyCapability != NULL) { + capability = reinterpret_cast((*$GSSystemCopyCapability)(reinterpret_cast(name))); + if (capability != nil) + capability = [capability autorelease]; + } else if ($GSSystemGetCapability != NULL) { + capability = reinterpret_cast((*$GSSystemGetCapability)(reinterpret_cast(name))); + } else { + capability = nil; + break; + } + + if (capability != nil) + break; + + CFRunLoopRun(); + } NSLog(@"%@", capability); -- cgit v1.2.3