diff options
Diffstat (limited to 'gssc.mm')
-rw-r--r-- | gssc.mm | 13 |
1 files changed, 10 insertions, 3 deletions
@@ -44,6 +44,7 @@ static CFArrayRef (*$GSSystemCopyCapability)(CFStringRef); static CFArrayRef (*$GSSystemGetCapability)(CFStringRef); +static CFTypeRef (*$MGCopyAnswer)(CFStringRef); void OnGSCapabilityChanged( CFNotificationCenterRef center, @@ -64,7 +65,7 @@ int main(int argc, char *argv[]) { NSString *name = nil; if (argc == 2) - name = [objc_getClass("NSString") stringWithUTF8String:argv[0]]; + name = [objc_getClass("NSString") stringWithUTF8String:argv[1]]; else if (argc > 2) { fprintf(stderr, "usage: %s [capability]\n", argv[0]); exit(1); @@ -94,8 +95,13 @@ int main(int argc, char *argv[]) { } else { capability = nil; - if (void *libMobileGestalt = dlopen("/usr/lib/libMobileGestalt.dylib", RTLD_GLOBAL | RTLD_LAZY)) - if (CFTypeRef (*$MGCopyAnswer)(CFStringRef) = reinterpret_cast<CFTypeRef (*)(CFStringRef)>(dlsym(libMobileGestalt, "MGCopyAnswer"))) { + void *libMobileGestalt = dlopen("/usr/lib/libMobileGestalt.dylib", RTLD_GLOBAL | RTLD_LAZY); + if (libMobileGestalt && ($MGCopyAnswer = reinterpret_cast<CFTypeRef (*)(CFStringRef)>(dlsym(libMobileGestalt, "MGCopyAnswer")))) { + if (name) { + capability = reinterpret_cast<const NSDictionary *>($MGCopyAnswer(reinterpret_cast<CFStringRef>(name))); + if (capability != nil) + capability = [capability autorelease]; + } else { NSMutableDictionary *answers([NSMutableDictionary dictionary]); for (NSString *name in [NSArray arrayWithObjects: @"1080p", @@ -698,6 +704,7 @@ int main(int argc, char *argv[]) { } capability = answers; } + } } if (capability != nil) { |