Commit bdc7147d authored by Brad King's avatar Brad King

ENH: Removed pipe selection argument from WaitForData method in kwsysProcess. ...

ENH: Removed pipe selection argument from WaitForData method in kwsysProcess.  This greatly simplifies its use.
parent e437a2fe
......@@ -213,13 +213,9 @@ kwsysEXPORT const char* kwsysProcess_GetErrorString(kwsysProcess* cp);
kwsysEXPORT void kwsysProcess_Execute(kwsysProcess* cp);
/**
* Block until data are available on a requested pipe, a timeout
* expires, or the child process terminates. Arguments are as
* follows:
* Block until data are available on a pipe, a timeout expires, or the
* child process terminates. Arguments are as follows:
*
* pipes = Flags for the child output pipes of interest to the caller.
* Possible values are Pipe_STDOUT and Pipe_STDERR. Multiple
* pipes may be specified by using the bitwise OR operator '|'.
* data = If data are read, the pointer to which this points is
* set to point to the data.
* length = If data are read, the integer to which this points is
......@@ -241,9 +237,8 @@ kwsysEXPORT void kwsysProcess_Execute(kwsysProcess* cp);
* call. Time elapsed has been subtracted from timeout
* argument.
*/
kwsysEXPORT int kwsysProcess_WaitForData(kwsysProcess* cp, int pipes,
char** data, int* length,
double* timeout);
kwsysEXPORT int kwsysProcess_WaitForData(kwsysProcess* cp, char** data,
int* length, double* timeout);
enum kwsysProcess_Pipes_e
{
kwsysProcess_Pipe_STDOUT=1,
......
......@@ -486,8 +486,8 @@ void kwsysProcess_Execute(kwsysProcess* cp)
}
/*--------------------------------------------------------------------------*/
int kwsysProcess_WaitForData(kwsysProcess* cp, int pipes, char** data,
int* length, double* userTimeout)
int kwsysProcess_WaitForData(kwsysProcess* cp, char** data, int* length,
double* userTimeout)
{
int i;
int max = -1;
......@@ -537,9 +537,9 @@ int kwsysProcess_WaitForData(kwsysProcess* cp, int pipes, char** data,
{
/* This is data on the special termination pipe. Ignore it. */
}
else if(pipes & (1 << i))
else if(data && length)
{
/* Caller wants this data. Report it. */
/* Report this data. */
*data = cp->PipeBuffer;
*length = n;
pipeId = (1 << i);
......@@ -687,7 +687,7 @@ int kwsysProcess_WaitForExit(kwsysProcess* cp, double* userTimeout)
}
/* Wait for all the pipes to close. Ignore all data. */
while((pipe = kwsysProcess_WaitForData(cp, 0, 0, 0, userTimeout)) > 0)
while((pipe = kwsysProcess_WaitForData(cp, 0, 0, userTimeout)) > 0)
{
if(pipe == kwsysProcess_Pipe_Timeout)
{
......
......@@ -921,7 +921,7 @@ void kwsysProcess_Execute(kwsysProcess* cp)
/*--------------------------------------------------------------------------*/
int kwsysProcess_WaitForData(kwsysProcess* cp, int pipes, char** data, int* length,
int kwsysProcess_WaitForData(kwsysProcess* cp, char** data, int* length,
double* userTimeout)
{
kwsysProcessTime userStartTime;
......@@ -997,18 +997,14 @@ int kwsysProcess_WaitForData(kwsysProcess* cp, int pipes, char** data, int* leng
/* The pipe closed. */
--cp->PipesLeft;
}
else if(pipes & (1 << cp->CurrentIndex))
else if(data && length)
{
/* Caller wants this data. Report it. */
/* Report this data. */
*data = cp->Pipe[cp->CurrentIndex].DataBuffer;
*length = cp->Pipe[cp->CurrentIndex].DataLength;
pipeId = (1 << cp->CurrentIndex);
done = 1;
}
else
{
/* Caller does not care about this pipe. Ignore the data. */
}
}
else
{
......@@ -1074,7 +1070,7 @@ int kwsysProcess_WaitForExit(kwsysProcess* cp, double* userTimeout)
}
/* Wait for the process to terminate. Ignore all data. */
while((pipe = kwsysProcess_WaitForData(cp, 0, 0, 0, userTimeout)) > 0)
while((pipe = kwsysProcess_WaitForData(cp, 0, 0, userTimeout)) > 0)
{
if(pipe == kwsysProcess_Pipe_Timeout)
{
......
......@@ -11,9 +11,7 @@ int main()
kwsysProcess_Execute(kp);
char* data = 0;
int length = 0;
while(kwsysProcess_WaitForData(kp, (kwsysProcess_Pipe_STDOUT |
kwsysProcess_Pipe_STDERR),
&data, &length, 0))
while(kwsysProcess_WaitForData(kp, &data, &length, 0))
{
kwsys_std::cout.write(data, length);
}
......
......@@ -66,9 +66,7 @@ int runChild(const char* cmd[], int state, int exception, int value)
kwsysProcess_SetTimeout(kp, 3);
kwsysProcess_Execute(kp);
while(kwsysProcess_WaitForData(kp, (kwsysProcess_Pipe_STDOUT |
kwsysProcess_Pipe_STDERR),
&data, &length, 0))
while(kwsysProcess_WaitForData(kp, &data, &length, 0))
{
fwrite(data, 1, length, stdout);
fflush(stdout);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment