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{
41 NSString *result = nil;
43 NSFileHandle *file = nil;
44 NSDictionary *environment = [NSDictionary dictionaryWithObjectsAndKeys: @"$PATH:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin",@"PATH",nil];
46 NSPipe *pipe = [NSPipe pipe];
47 NSTask *taskToRun = [[NSTask alloc] init];
49 [taskToRun setLaunchPath: taskName];
50 [taskToRun setArguments: args];
51 [taskToRun setEnvironment:environment];
52 [taskToRun setStandardOutput: pipe];
53 file = [pipe fileHandleForReading];
55 [taskToRun waitUntilExit];
56 status = [taskToRun terminationStatus];
58 NSData *data = [file readDataToEndOfFile];
59 // remove the \n character from unix command
60 if([data length] > 0){
61 NSData *realData = [NSData dataWithBytes:[data bytes]
62 length:[data length]-1];
65 result = [[NSString alloc] initWithData: realData
66 encoding: NSUTF8StringEncoding];
69 NSLog(@"Task failed.");
71 return [result autorelease];
75 // -------------------------------------------------------------------------------
77 // -------------------------------------------------------------------------------
78 +(int) executeTaskWithAuth:(NSString*) taskName arguments:(NSArray *)args authExtForm:(NSData*)auth {
79 NSString *result = nil;
81 NSFileHandle *file = nil;
82 NSDictionary *environment = [NSDictionary dictionaryWithObjectsAndKeys: @"$PATH:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin",@"PATH",nil];
84 NSPipe *pipe = [NSPipe pipe];
85 NSPipe *pipeIn = [NSPipe pipe];
86 NSTask *taskToRun = [[NSTask alloc] init];
88 [taskToRun setLaunchPath: taskName];
89 [taskToRun setArguments: args];
90 [taskToRun setEnvironment:environment];
91 [taskToRun setStandardOutput: pipe];
92 [taskToRun setStandardInput: pipeIn];
93 file = [pipe fileHandleForReading];
94 //Write to standard in
97 NSFileHandle* taskInput = [[ taskToRun standardInput ] fileHandleForWriting ];
98 [taskInput writeData:auth];
99 [taskToRun waitUntilExit];
100 status = [taskToRun terminationStatus];
102 NSData *data = [file readDataToEndOfFile];
103 // remove the \n character from unix command
104 if([data length] > 0){
105 NSData *realData = [NSData dataWithBytes:[data bytes]
106 length:[data length]-1];
109 result = [[NSString alloc] initWithData: realData
110 encoding: NSUTF8StringEncoding];