From: Jay Freeman (saurik) Date: Sat, 19 Feb 2011 14:40:05 +0000 (-0800) Subject: Expose sysctl read access to JavaScript. X-Git-Tag: v1.1.0%b1~292 X-Git-Url: https://git.saurik.com/cydia.git/commitdiff_plain/5bc1277a7e4b3002f82031b4095fad5e901b806d?hp=56296da00b08734c4491c75adef73afe358b9d4e Expose sysctl read access to JavaScript. --- diff --git a/MobileCydia.mm b/MobileCydia.mm index 1e96e7bc..3180efb6 100644 --- a/MobileCydia.mm +++ b/MobileCydia.mm @@ -3913,6 +3913,10 @@ static NSString *Warning_; return @"format"; else if (selector == @selector(getAllSources)) return @"getAllSourcs"; + else if (selector == @selector(getKernelNumber:)) + return @"getKernelNumber"; + else if (selector == @selector(getKernelString:)) + return @"getKernelString"; else if (selector == @selector(getInstalledPackages)) return @"getInstalledPackages"; else if (selector == @selector(getPackageById:)) @@ -3951,6 +3955,40 @@ static NSString *Warning_; return [feature isEqualToString:@"window.open"]; } +- (NSNumber *) getKernelNumber:(NSString *)name { + const char *string([name UTF8String]); + + size_t size; + if (sysctlbyname(string, NULL, &size, NULL, 0) == -1) + return (id) [NSNull null]; + + if (size != sizeof(int)) + return (id) [NSNull null]; + + int value; + if (sysctlbyname(string, &value, &size, NULL, 0) == -1) + return (id) [NSNull null]; + + return [NSNumber numberWithInt:value]; +} + +- (NSString *) getKernelString:(NSString *)name { + const char *string([name UTF8String]); + + size_t size; + if (sysctlbyname(string, NULL, &size, NULL, 0) == -1) + return (id) [NSNull null]; + + char value[size + 1]; + if (sysctlbyname(string, value, &size, NULL, 0) == -1) + return (id) [NSNull null]; + + // XXX: just in case you request something ludicrous + value[size] = '\0'; + + return [NSString stringWithCString:value]; +} + - (void) addTrivialSource:(NSString *)href { [delegate_ performSelectorOnMainThread:@selector(addTrivialSource:) withObject:href waitUntilDone:NO]; }