mirror of
https://github.com/gnustep/libs-ec.git
synced 2025-02-19 10:01:24 +00:00
Add some fine control over standard IO stream handling
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/ec/trunk@38434 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
ccfe71f75d
commit
1efeaea3e4
5 changed files with 51 additions and 4 deletions
13
ChangeLog
13
ChangeLog
|
@ -1,3 +1,16 @@
|
||||||
|
2015-03-26 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
|
* Control.plist:
|
||||||
|
* EcCommand.m:
|
||||||
|
* EcProcess.h:
|
||||||
|
* EcProcess.m:
|
||||||
|
New options for dealing with I/O. In EcProcess we can set
|
||||||
|
EcKeepStandardError to keep the stderr stream separate from the
|
||||||
|
debug logging file.
|
||||||
|
When a process is launched from the Command server, we can define
|
||||||
|
KeepStandardInput, KeepStandardOutput, and KeepStandardError flags
|
||||||
|
in the task info to stop the standard streams from being closed.
|
||||||
|
|
||||||
2015-03-19 Richard Frith-Macdonald <rfm@gnu.org>
|
2015-03-19 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
* EcProcess.m:
|
* EcProcess.m:
|
||||||
|
|
|
@ -41,6 +41,9 @@
|
||||||
Home = "~xxx/Test"; // Directory to run in
|
Home = "~xxx/Test"; // Directory to run in
|
||||||
Args = ("-Debug", "YES"); // Args to launch with
|
Args = ("-Debug", "YES"); // Args to launch with
|
||||||
Auto = NO; // Auto-launch?
|
Auto = NO; // Auto-launch?
|
||||||
|
KeepStandardInput = YES; // Don't close stdin
|
||||||
|
KeepStandardOutput = YES; // Don't close stdout
|
||||||
|
KeepStandardError = YES; // Don't close stderr
|
||||||
};
|
};
|
||||||
Bar = {
|
Bar = {
|
||||||
Prog = "Bar"; // RName of binary
|
Prog = "Bar"; // RName of binary
|
||||||
|
|
23
EcCommand.m
23
EcCommand.m
|
@ -1965,9 +1965,26 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
|
||||||
}
|
}
|
||||||
if (prog != nil)
|
if (prog != nil)
|
||||||
{
|
{
|
||||||
[task setStandardInput: hdl];
|
NSString *s;
|
||||||
[task setStandardOutput: hdl];
|
|
||||||
[task setStandardError: hdl];
|
s = [taskInfo objectForKey: @"KeepStandardInput"];
|
||||||
|
if (NO == [s respondsToSelector: @selector(boolValue)]
|
||||||
|
|| NO == [s boolValue])
|
||||||
|
{
|
||||||
|
[task setStandardInput: hdl];
|
||||||
|
}
|
||||||
|
s = [taskInfo objectForKey: @"KeepStandardOutput"];
|
||||||
|
if (NO == [s respondsToSelector: @selector(boolValue)]
|
||||||
|
|| NO == [s boolValue])
|
||||||
|
{
|
||||||
|
[task setStandardOutput: hdl];
|
||||||
|
}
|
||||||
|
s = [taskInfo objectForKey: @"KeepStandardError"];
|
||||||
|
if (NO == [s respondsToSelector: @selector(boolValue)]
|
||||||
|
|| NO == [s boolValue])
|
||||||
|
{
|
||||||
|
[task setStandardError: hdl];
|
||||||
|
}
|
||||||
if (home != nil && [home length] > 0)
|
if (home != nil && [home length] > 0)
|
||||||
{
|
{
|
||||||
[task setCurrentDirectoryPath: home];
|
[task setCurrentDirectoryPath: home];
|
||||||
|
|
|
@ -76,6 +76,14 @@
|
||||||
number of open file descriptors has been reached, rather
|
number of open file descriptors has been reached, rather
|
||||||
than waiting for the operating system imposed limit.
|
than waiting for the operating system imposed limit.
|
||||||
</desc>
|
</desc>
|
||||||
|
<term>EcKeepStandardError</term>
|
||||||
|
<desc>
|
||||||
|
This boolean value determines whether the standard error output
|
||||||
|
should be kept as it is on process startup, or should be merged
|
||||||
|
with the local debug log to file.<br />
|
||||||
|
The default (EcKeepStandardError set to NO) is to merge the
|
||||||
|
standard error logging with the debug logging.
|
||||||
|
</desc>
|
||||||
<term>EcMemory</term>
|
<term>EcMemory</term>
|
||||||
<desc>
|
<desc>
|
||||||
This boolean value determines whether statistics on creation
|
This boolean value determines whether statistics on creation
|
||||||
|
|
|
@ -123,6 +123,7 @@ static BOOL cmdFlagDaemon = NO;
|
||||||
static BOOL cmdFlagTesting = NO;
|
static BOOL cmdFlagTesting = NO;
|
||||||
static BOOL cmdIsQuitting = NO;
|
static BOOL cmdIsQuitting = NO;
|
||||||
static BOOL cmdIsRunning = NO;
|
static BOOL cmdIsRunning = NO;
|
||||||
|
static BOOL cmdKeepStderr = NO;
|
||||||
static NSInteger cmdQuitStatus = 0;
|
static NSInteger cmdQuitStatus = 0;
|
||||||
static NSString *cmdInst = nil;
|
static NSString *cmdInst = nil;
|
||||||
static NSString *cmdName = nil;
|
static NSString *cmdName = nil;
|
||||||
|
@ -1514,7 +1515,7 @@ static NSString *noFiles = @"No log files to archive";
|
||||||
* As a special case, if this is the default debug file
|
* As a special case, if this is the default debug file
|
||||||
* we must set it up to write to stderr.
|
* we must set it up to write to stderr.
|
||||||
*/
|
*/
|
||||||
if ([name isEqual: cmdDebugName] == YES)
|
if (NO == cmdKeepStderr && [name isEqual: cmdDebugName] == YES)
|
||||||
{
|
{
|
||||||
int desc;
|
int desc;
|
||||||
|
|
||||||
|
@ -3741,6 +3742,11 @@ NSLog(@"Ignored attempt to set timer interval to %g ... using 10.0", interval);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* See if we should keep stderr separate, or merge it with
|
||||||
|
* our debug output (the default).
|
||||||
|
*/
|
||||||
|
cmdKeepStderr = [cmdDefs boolForKey: @"KeepStandardError"];
|
||||||
|
|
||||||
if (nil == noNetConfig)
|
if (nil == noNetConfig)
|
||||||
{
|
{
|
||||||
noNetConfig = [[NSMutableArray alloc] initWithCapacity: 4];
|
noNetConfig = [[NSMutableArray alloc] initWithCapacity: 4];
|
||||||
|
|
Loading…
Reference in a new issue