|
@@ -4,8 +4,7 @@
|
|
|
|
|
|
@implementation HelperClass
|
|
|
|
|
|
-+ (NSArray <StatusPackageModel*>*)statusInstalledPackagesFromFile:(NSString *)statusFile
|
|
|
-{
|
|
|
++ (NSArray <StatusPackageModel*>*)statusInstalledPackagesFromFile:(NSString *)statusFile {
|
|
|
|
|
|
if (![FM fileExistsAtPath:statusFile]) {
|
|
|
return nil;
|
|
@@ -15,56 +14,42 @@
|
|
|
//DLog(@"lineArray: %@", lineArray);
|
|
|
NSMutableArray *mutableList = [[NSMutableArray alloc] init];
|
|
|
//NSMutableDictionary *mutableDict = [[NSMutableDictionary alloc] init];
|
|
|
- for (id currentItem in lineArray)
|
|
|
- {
|
|
|
-
|
|
|
+ for (id currentItem in lineArray) {
|
|
|
StatusPackageModel *debModel = [[StatusPackageModel alloc] initWithRawControlString:currentItem];
|
|
|
if (debModel != nil)
|
|
|
[mutableList addObject:debModel];
|
|
|
}
|
|
|
-
|
|
|
NSSortDescriptor *nameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES
|
|
|
selector:@selector(localizedCaseInsensitiveCompare:)];
|
|
|
NSSortDescriptor *packageDescriptor = [[NSSortDescriptor alloc] initWithKey:@"package" ascending:YES
|
|
|
selector:@selector(localizedCaseInsensitiveCompare:)];
|
|
|
NSArray *descriptors = [NSArray arrayWithObjects:nameDescriptor, packageDescriptor, nil];
|
|
|
NSArray *sortedArray = [mutableList sortedArrayUsingDescriptors:descriptors];
|
|
|
-
|
|
|
-
|
|
|
mutableList = nil;
|
|
|
-
|
|
|
return sortedArray;
|
|
|
}
|
|
|
|
|
|
+ (BOOL)shouldContinueWithError:(NSString *)errorMessage {
|
|
|
-
|
|
|
NSString *errorString = [NSString stringWithFormat:@"\n%@ Are you sure you want to continue? [y/n]?", errorMessage];
|
|
|
-
|
|
|
char c;
|
|
|
printf("%s", [errorString UTF8String] );
|
|
|
c=getchar();
|
|
|
- while(c!='y' && c!='n')
|
|
|
- {
|
|
|
+ while(c!='y' && c!='n') {
|
|
|
if (c!='\n'){
|
|
|
printf("[y/n]");
|
|
|
}
|
|
|
c=getchar();
|
|
|
}
|
|
|
-
|
|
|
- if (c == 'n')
|
|
|
- {
|
|
|
+ if (c == 'n') {
|
|
|
DLog(@"\nSmart move... exiting\n\n");
|
|
|
return FALSE;
|
|
|
} else if (c == 'y') {
|
|
|
DLog(@"\nDon't say we didn't warn ya!....\n");
|
|
|
}
|
|
|
-
|
|
|
return TRUE;
|
|
|
-
|
|
|
}
|
|
|
|
|
|
-+ (NSArray *)arrayReturnForTask:(NSString *)taskBinary withArguments:(NSArray *)taskArguments
|
|
|
-{
|
|
|
++ (NSArray *)arrayReturnForTask:(NSString *)taskBinary withArguments:(NSArray *)taskArguments {
|
|
|
NSLog(@"%@ %@", taskBinary, [taskArguments componentsJoinedByString:@" "]);
|
|
|
NSTask *task = [[NSTask alloc] init];
|
|
|
NSPipe *pipe = [[NSPipe alloc] init];
|
|
@@ -74,40 +59,30 @@
|
|
|
[task setArguments:taskArguments];
|
|
|
[task setStandardOutput:pipe];
|
|
|
[task setStandardError:pipe];
|
|
|
-
|
|
|
[task launch];
|
|
|
-
|
|
|
NSData *outData = nil;
|
|
|
NSString *temp = nil;
|
|
|
- while((outData = [handle readDataToEndOfFile]) && [outData length])
|
|
|
- {
|
|
|
+ while((outData = [handle readDataToEndOfFile]) && [outData length]) {
|
|
|
temp = [[NSString alloc] initWithData:outData encoding:NSASCIIStringEncoding];
|
|
|
-
|
|
|
}
|
|
|
[handle closeFile];
|
|
|
task = nil;
|
|
|
-
|
|
|
return [temp componentsSeparatedByString:@"\n"];
|
|
|
-
|
|
|
}
|
|
|
|
|
|
-+ (NSString *)singleLineReturnForProcess:(NSString *)call
|
|
|
-{
|
|
|
++ (NSString *)singleLineReturnForProcess:(NSString *)call {
|
|
|
return [[self returnForProcess:call] componentsJoinedByString:@"\n"];
|
|
|
}
|
|
|
|
|
|
-+ (NSArray *)returnForProcess:(NSString *)call
|
|
|
-{
|
|
|
++ (NSArray *)returnForProcess:(NSString *)call {
|
|
|
if (call==nil)
|
|
|
return 0;
|
|
|
char line[200];
|
|
|
DLog(@"\nRunning process: %@\n", call);
|
|
|
FILE* fp = popen([call UTF8String], "r");
|
|
|
NSMutableArray *lines = [[NSMutableArray alloc]init];
|
|
|
- if (fp)
|
|
|
- {
|
|
|
- while (fgets(line, sizeof line, fp))
|
|
|
- {
|
|
|
+ if (fp) {
|
|
|
+ while (fgets(line, sizeof line, fp)) {
|
|
|
NSString *s = [NSString stringWithCString:line encoding:NSUTF8StringEncoding];
|
|
|
s = [s stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
|
|
|
[lines addObject:s];
|
|
@@ -130,12 +105,8 @@
|
|
|
[newString replaceOccurrencesOfString:@" " withString:@" " options:NSLiteralSearch range:NSMakeRange(0, [newString length])];
|
|
|
[newString replaceOccurrencesOfString:@" " withString:@" " options:NSLiteralSearch range:NSMakeRange(0, [newString length])];
|
|
|
[newString replaceOccurrencesOfString:@" " withString:@" " options:NSLiteralSearch range:NSMakeRange(0, [newString length])];
|
|
|
-
|
|
|
NSArray *lineObjects = [newString componentsSeparatedByString:@" "];
|
|
|
-
|
|
|
//NSLog(@"lineObjects: %@", lineObjects);
|
|
|
-
|
|
|
-
|
|
|
/*
|
|
|
|
|
|
"drwxr-xr-x",
|
|
@@ -145,8 +116,6 @@
|
|
|
"01:21",
|
|
|
"./"
|
|
|
*/
|
|
|
-
|
|
|
-
|
|
|
NSString *permissionsAndType = [lineObjects objectAtIndex:0];
|
|
|
NSString *userGroup = [lineObjects objectAtIndex:1];
|
|
|
NSString *size = [lineObjects objectAtIndex:2];
|
|
@@ -156,7 +125,6 @@
|
|
|
|
|
|
//@"drwxr-xr-x"
|
|
|
NSString *fileTypeChar = [permissionsAndType substringWithRange:NSMakeRange(0, 1)];
|
|
|
-
|
|
|
NSString *octalPermissions = [self octalFromSymbols:permissionsAndType];
|
|
|
NSString *octalUG = [self octalFromGroupSymbols:userGroup];
|
|
|
NSString *fileName = [path lastPathComponent];
|
|
@@ -169,7 +137,6 @@
|
|
|
switch (pf.type) {
|
|
|
case BSPackageFileTypeLink:
|
|
|
{
|
|
|
-
|
|
|
fullPath = [lineObjects objectAtIndex:7];
|
|
|
NSString *linkDest = [NSString stringWithFormat:@"/%@", path];
|
|
|
pf.permissions = octalPermissions;
|
|
@@ -216,70 +183,49 @@
|
|
|
}
|
|
|
|
|
|
|
|
|
-+ (NSString *)octalFromGroupSymbols:(NSString *)theSymbols
|
|
|
-{
|
|
|
++ (NSString *)octalFromGroupSymbols:(NSString *)theSymbols {
|
|
|
NSArray *groupArray = [theSymbols componentsSeparatedByString:@"/"];
|
|
|
NSString *user = [groupArray objectAtIndex:0];
|
|
|
NSString *group = [groupArray objectAtIndex:1];
|
|
|
-
|
|
|
NSString *octalUser = nil;
|
|
|
NSString *octalGroup = nil;
|
|
|
//uid=0(root) gid=0(wheel) groups=0(wheel),1(daemon),2(kmem),3(sys),4(tty),5(operator),8(procview),9(procmod),20(staff),29(certusers),80(admin)
|
|
|
- if ([user isEqualToString:@"root"])
|
|
|
- {
|
|
|
+ if ([user isEqualToString:@"root"]) {
|
|
|
octalUser = @"0";
|
|
|
- } else if ([user isEqualToString:@"mobile"])
|
|
|
- {
|
|
|
+ } else if ([user isEqualToString:@"mobile"]) {
|
|
|
octalUser = @"501";
|
|
|
}
|
|
|
//obviously more cases!! FIXME:
|
|
|
-
|
|
|
- if ([group isEqualToString:@"staff"])
|
|
|
- {
|
|
|
+ if ([group isEqualToString:@"staff"]) {
|
|
|
octalGroup = @"20";
|
|
|
- } else if ([group isEqualToString:@"admin"])
|
|
|
- {
|
|
|
+ } else if ([group isEqualToString:@"admin"]) {
|
|
|
octalGroup = @"80";
|
|
|
- } else if ([group isEqualToString:@"wheel"])
|
|
|
- {
|
|
|
+ } else if ([group isEqualToString:@"wheel"]) {
|
|
|
octalGroup = @"0";
|
|
|
- } else if ([group isEqualToString:@"daemon"])
|
|
|
- {
|
|
|
+ } else if ([group isEqualToString:@"daemon"]) {
|
|
|
octalGroup = @"1";
|
|
|
- } else if ([group isEqualToString:@"kmem"])
|
|
|
- {
|
|
|
+ } else if ([group isEqualToString:@"kmem"]) {
|
|
|
octalGroup = @"2";
|
|
|
- } else if ([group isEqualToString:@"sys"])
|
|
|
- {
|
|
|
+ } else if ([group isEqualToString:@"sys"]) {
|
|
|
octalGroup = @"3";
|
|
|
- } else if ([group isEqualToString:@"tty"])
|
|
|
- {
|
|
|
+ } else if ([group isEqualToString:@"tty"]) {
|
|
|
octalGroup = @"4";
|
|
|
- } else if ([group isEqualToString:@"operator"])
|
|
|
- {
|
|
|
+ } else if ([group isEqualToString:@"operator"]) {
|
|
|
octalGroup = @"5";
|
|
|
- } else if ([group isEqualToString:@"procview"])
|
|
|
- {
|
|
|
+ } else if ([group isEqualToString:@"procview"]) {
|
|
|
octalGroup = @"8";
|
|
|
- } else if ([group isEqualToString:@"procmod"])
|
|
|
- {
|
|
|
+ } else if ([group isEqualToString:@"procmod"]) {
|
|
|
octalGroup = @"9";
|
|
|
- } else if ([group isEqualToString:@"certusers"])
|
|
|
- {
|
|
|
+ } else if ([group isEqualToString:@"certusers"]) {
|
|
|
octalGroup = @"29";
|
|
|
- } else
|
|
|
- {
|
|
|
+ } else {
|
|
|
octalGroup = @"501"; //default to mobile
|
|
|
}
|
|
|
//uid=0(root) gid=0(wheel) groups=0(wheel),1(daemon),2(kmem),3(sys),4(tty),5(operator),8(procview),9(procmod),20(staff),29(certusers),80(admin)
|
|
|
return [NSString stringWithFormat:@"%@:%@", octalUser, octalGroup];
|
|
|
-
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+ (InputPackage *)packageForDeb:(NSString *)debFile {
|
|
|
|
|
|
NSString *packageName = [self singleLineReturnForProcess:[NSString stringWithFormat:@"/usr/local/bin/dpkg -f %@ Package", debFile]];
|
|
@@ -307,8 +253,7 @@
|
|
|
|
|
|
}
|
|
|
|
|
|
-+ (NSString *)octalFromSymbols:(NSString *)theSymbols
|
|
|
-{
|
|
|
++ (NSString *)octalFromSymbols:(NSString *)theSymbols {
|
|
|
//NSLog(@"%@ %s", self, _cmd);
|
|
|
NSString *U = [theSymbols substringWithRange:NSMakeRange(1, 3)];
|
|
|
NSString *G = [theSymbols substringWithRange:NSMakeRange(4, 3)];
|
|
@@ -321,27 +266,20 @@
|
|
|
//USER
|
|
|
|
|
|
int sIdBit = 0;
|
|
|
-
|
|
|
int uOctal = 0;
|
|
|
-
|
|
|
const char *uArray = [U cStringUsingEncoding:NSASCIIStringEncoding];
|
|
|
- int stringLength = [U length];
|
|
|
+ NSInteger stringLength = [U length];
|
|
|
|
|
|
int x;
|
|
|
- for( x=0; x<stringLength; x++ )
|
|
|
- {
|
|
|
+ for( x=0; x<stringLength; x++ ) {
|
|
|
unsigned int aCharacter = uArray[x];
|
|
|
- if (aCharacter == 'r')
|
|
|
- {
|
|
|
+ if (aCharacter == 'r') {
|
|
|
uOctal += 4;
|
|
|
- } else if (aCharacter == 'w')
|
|
|
- {
|
|
|
+ } else if (aCharacter == 'w') {
|
|
|
uOctal += 2;
|
|
|
- } else if (aCharacter == 'x')
|
|
|
- {
|
|
|
+ } else if (aCharacter == 'x') {
|
|
|
uOctal += 1;
|
|
|
- } else if (aCharacter == 's')
|
|
|
- {
|
|
|
+ } else if (aCharacter == 's') {
|
|
|
sIdBit += 4;
|
|
|
}
|
|
|
}
|
|
@@ -353,49 +291,34 @@
|
|
|
stringLength = [G length];
|
|
|
|
|
|
int y;
|
|
|
- for( y=0; y<stringLength; y++ )
|
|
|
- {
|
|
|
+ for( y=0; y<stringLength; y++ ) {
|
|
|
unsigned int aCharacter = gArray[y];
|
|
|
- if (aCharacter == 'r')
|
|
|
- {
|
|
|
+ if (aCharacter == 'r') {
|
|
|
gOctal += 4;
|
|
|
- } else if (aCharacter == 'w')
|
|
|
- {
|
|
|
+ } else if (aCharacter == 'w') {
|
|
|
gOctal += 2;
|
|
|
- } else if (aCharacter == 'x')
|
|
|
- {
|
|
|
+ } else if (aCharacter == 'x') {
|
|
|
gOctal += 1;
|
|
|
- } else if (aCharacter == 's')
|
|
|
- {
|
|
|
+ } else if (aCharacter == 's') {
|
|
|
gOctal += 2;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
//OTHERS
|
|
|
int z;
|
|
|
int oOctal = 0;
|
|
|
const char *oArray = [O cStringUsingEncoding:NSASCIIStringEncoding];
|
|
|
stringLength = [O length];
|
|
|
-
|
|
|
-
|
|
|
- for( z=0; z<stringLength; z++ )
|
|
|
- {
|
|
|
+ for( z=0; z<stringLength; z++ ) {
|
|
|
unsigned int aCharacter = oArray[z];
|
|
|
- if (aCharacter == 'r')
|
|
|
- {
|
|
|
+ if (aCharacter == 'r') {
|
|
|
oOctal += 4;
|
|
|
- } else if (aCharacter == 'w')
|
|
|
- {
|
|
|
+ } else if (aCharacter == 'w') {
|
|
|
oOctal += 2;
|
|
|
- } else if (aCharacter == 'x')
|
|
|
- {
|
|
|
+ } else if (aCharacter == 'x') {
|
|
|
oOctal += 1;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
return [NSString stringWithFormat:@"%i%i%i%i", sIdBit, uOctal, gOctal, oOctal];
|
|
|
-
|
|
|
}
|
|
|
|
|
|
@end
|