5 // Created by Claudio Bisegni on 25/06/07.
6 // Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
12 @implementation TaskUtil
14 // -------------------------------------------------------------------------------
15 // executeTaskSearchingPath:
16 // -------------------------------------------------------------------------------
17 +(NSString*) executeTaskSearchingPath:(NSString*)unixCommand args:(NSArray*)args
19 NSString *commResult = nil;
20 NSString *commPath = [self searchExecutablePath:unixCommand];
22 commResult = [self executeTask:commPath
28 // -------------------------------------------------------------------------------
30 // -------------------------------------------------------------------------------
31 +(NSString*) searchExecutablePath:(NSString*)unixCommand
33 NSString *commPath = [self executeTask:@"/usr/bin/which" arguments:[NSArray arrayWithObjects:unixCommand, nil]];
37 // -------------------------------------------------------------------------------
39 // -------------------------------------------------------------------------------
40 +(NSString*) executeTask:(NSString*) taskName arguments:(NSArray *)args{
42 NSString *result = nil;
44 NSFileHandle *file = nil;
45 NSDictionary *environment = [NSDictionary dictionaryWithObjectsAndKeys: @"$PATH:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin",@"PATH",nil];
47 NSPipe *pipe = [NSPipe pipe];
48 NSTask *taskToRun = [[NSTask alloc] init];
50 [taskToRun setLaunchPath: taskName];
51 [taskToRun setArguments: args];
52 [taskToRun setEnvironment:environment];
53 [taskToRun setStandardOutput: pipe];
54 file = [pipe fileHandleForReading];
56 [taskToRun waitUntilExit];
57 status = [taskToRun terminationStatus];
59 NSLog(@"Task succeeded.");
60 NSData *data = [file readDataToEndOfFile];
61 // remove the \n character from unix command
62 if([data length] > 0){
63 NSData *realData = [NSData dataWithBytes:[data bytes]
64 length:[data length]-1];
67 result = [[NSString alloc] initWithData: realData
68 encoding: NSUTF8StringEncoding];
72 NSLog(@"Task failed.");
74 return [result autorelease];
78 // -------------------------------------------------------------------------------
80 // -------------------------------------------------------------------------------
81 +(int) executeTaskWithAuth:(NSString*) taskName arguments:(NSArray *)args authExtForm:(NSData*)auth {
83 NSString *result = nil;
85 NSFileHandle *file = nil;
86 NSDictionary *environment = [NSDictionary dictionaryWithObjectsAndKeys: @"$PATH:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin",@"PATH",nil];
88 NSPipe *pipe = [NSPipe pipe];
89 NSPipe *pipeIn = [NSPipe pipe];
90 NSTask *taskToRun = [[NSTask alloc] init];
92 [taskToRun setLaunchPath: taskName];
93 [taskToRun setArguments: args];
94 [taskToRun setEnvironment:environment];
95 [taskToRun setStandardOutput: pipe];
96 [taskToRun setStandardInput: pipeIn];
97 file = [pipe fileHandleForReading];
98 //Write to standard in
101 NSFileHandle* taskInput = [[ taskToRun standardInput ] fileHandleForWriting ];
102 [taskInput writeData:auth];
103 [taskToRun waitUntilExit];
104 status = [taskToRun terminationStatus];
106 NSLog(@"Task succeeded.");
107 NSData *data = [file readDataToEndOfFile];
108 // remove the \n character from unix command
109 if([data length] > 0){
110 NSData *realData = [NSData dataWithBytes:[data bytes]
111 length:[data length]-1];
114 result = [[NSString alloc] initWithData: realData
115 encoding: NSUTF8StringEncoding];
120 NSLog(@"Task failed.");