Merge branch 'upstream-kwsys' into update-kwsys

This commit is contained in:
Brad King 2015-05-07 14:34:50 -04:00
commit 31c218e6e1
3 changed files with 23 additions and 4 deletions

View File

@ -36,6 +36,7 @@
# define kwsysProcess_SetPipeShared kwsys_ns(Process_SetPipeShared) # define kwsysProcess_SetPipeShared kwsys_ns(Process_SetPipeShared)
# define kwsysProcess_Option_Detach kwsys_ns(Process_Option_Detach) # define kwsysProcess_Option_Detach kwsys_ns(Process_Option_Detach)
# define kwsysProcess_Option_HideWindow kwsys_ns(Process_Option_HideWindow) # define kwsysProcess_Option_HideWindow kwsys_ns(Process_Option_HideWindow)
# define kwsysProcess_Option_MergeOutput kwsys_ns(Process_Option_MergeOutput)
# define kwsysProcess_Option_Verbatim kwsys_ns(Process_Option_Verbatim) # define kwsysProcess_Option_Verbatim kwsys_ns(Process_Option_Verbatim)
# define kwsysProcess_GetOption kwsys_ns(Process_GetOption) # define kwsysProcess_GetOption kwsys_ns(Process_GetOption)
# define kwsysProcess_SetOption kwsys_ns(Process_SetOption) # define kwsysProcess_SetOption kwsys_ns(Process_SetOption)
@ -186,6 +187,12 @@ kwsysEXPORT void kwsysProcess_SetPipeNative(kwsysProcess* cp, int pipe,
* 0 = No (default) * 0 = No (default)
* 1 = Yes * 1 = Yes
* *
* kwsysProcess_Option_MergeOutput = Whether to merge stdout/stderr.
* No content will be returned as stderr.
* Any actual stderr will be on stdout.
* 0 = No (default)
* 1 = Yes
*
* kwsysProcess_Option_Verbatim = Whether SetCommand and AddCommand * kwsysProcess_Option_Verbatim = Whether SetCommand and AddCommand
* should treat the first argument * should treat the first argument
* as a verbatim command line * as a verbatim command line
@ -200,6 +207,7 @@ enum kwsysProcess_Option_e
{ {
kwsysProcess_Option_HideWindow, kwsysProcess_Option_HideWindow,
kwsysProcess_Option_Detach, kwsysProcess_Option_Detach,
kwsysProcess_Option_MergeOutput,
kwsysProcess_Option_Verbatim kwsysProcess_Option_Verbatim
}; };
@ -384,6 +392,7 @@ kwsysEXPORT void kwsysProcess_Kill(kwsysProcess* cp);
# undef kwsysProcess_SetPipeShared # undef kwsysProcess_SetPipeShared
# undef kwsysProcess_Option_Detach # undef kwsysProcess_Option_Detach
# undef kwsysProcess_Option_HideWindow # undef kwsysProcess_Option_HideWindow
# undef kwsysProcess_Option_MergeOutput
# undef kwsysProcess_Option_Verbatim # undef kwsysProcess_Option_Verbatim
# undef kwsysProcess_GetOption # undef kwsysProcess_GetOption
# undef kwsysProcess_SetOption # undef kwsysProcess_SetOption

View File

@ -234,6 +234,9 @@ struct kwsysProcess_s
/* Whether to treat command lines as verbatim. */ /* Whether to treat command lines as verbatim. */
int Verbatim; int Verbatim;
/* Whether to merge stdout/stderr of the child. */
int MergeOutput;
/* Time at which the child started. Negative for no timeout. */ /* Time at which the child started. Negative for no timeout. */
kwsysProcessTime StartTime; kwsysProcessTime StartTime;
@ -644,6 +647,7 @@ int kwsysProcess_GetOption(kwsysProcess* cp, int optionId)
switch(optionId) switch(optionId)
{ {
case kwsysProcess_Option_Detach: return cp->OptionDetach; case kwsysProcess_Option_Detach: return cp->OptionDetach;
case kwsysProcess_Option_MergeOutput: return cp->MergeOutput;
case kwsysProcess_Option_Verbatim: return cp->Verbatim; case kwsysProcess_Option_Verbatim: return cp->Verbatim;
default: return 0; default: return 0;
} }
@ -660,6 +664,7 @@ void kwsysProcess_SetOption(kwsysProcess* cp, int optionId, int value)
switch(optionId) switch(optionId)
{ {
case kwsysProcess_Option_Detach: cp->OptionDetach = value; break; case kwsysProcess_Option_Detach: cp->OptionDetach = value; break;
case kwsysProcess_Option_MergeOutput: cp->MergeOutput = value; break;
case kwsysProcess_Option_Verbatim: cp->Verbatim = value; break; case kwsysProcess_Option_Verbatim: cp->Verbatim = value; break;
default: break; default: break;
} }
@ -997,7 +1002,7 @@ void kwsysProcess_Execute(kwsysProcess* cp)
nextStdIn = p[0]; nextStdIn = p[0];
si.StdOut = p[1]; si.StdOut = p[1];
} }
si.StdErr = cp->PipeChildStd[2]; si.StdErr = cp->MergeOutput? cp->PipeChildStd[1] : cp->PipeChildStd[2];
{ {
int res = kwsysProcessCreate(cp, i, &si); int res = kwsysProcessCreate(cp, i, &si);
@ -1011,7 +1016,7 @@ void kwsysProcess_Execute(kwsysProcess* cp)
{ {
kwsysProcessCleanupDescriptor(&si.StdOut); kwsysProcessCleanupDescriptor(&si.StdOut);
} }
if (si.StdErr != cp->PipeChildStd[2]) if (si.StdErr != cp->PipeChildStd[2] && !cp->MergeOutput)
{ {
kwsysProcessCleanupDescriptor(&si.StdErr); kwsysProcessCleanupDescriptor(&si.StdErr);
} }

View File

@ -226,6 +226,9 @@ struct kwsysProcess_s
/* Whether to treat command lines as verbatim. */ /* Whether to treat command lines as verbatim. */
int Verbatim; int Verbatim;
/* Whether to merge stdout/stderr of the child. */
int MergeOutput;
/* Mutex to protect the shared index used by threads to report data. */ /* Mutex to protect the shared index used by threads to report data. */
HANDLE SharedIndexMutex; HANDLE SharedIndexMutex;
@ -806,6 +809,7 @@ int kwsysProcess_GetOption(kwsysProcess* cp, int optionId)
{ {
case kwsysProcess_Option_Detach: return cp->OptionDetach; case kwsysProcess_Option_Detach: return cp->OptionDetach;
case kwsysProcess_Option_HideWindow: return cp->HideWindow; case kwsysProcess_Option_HideWindow: return cp->HideWindow;
case kwsysProcess_Option_MergeOutput: return cp->MergeOutput;
case kwsysProcess_Option_Verbatim: return cp->Verbatim; case kwsysProcess_Option_Verbatim: return cp->Verbatim;
default: return 0; default: return 0;
} }
@ -823,6 +827,7 @@ void kwsysProcess_SetOption(kwsysProcess* cp, int optionId, int value)
{ {
case kwsysProcess_Option_Detach: cp->OptionDetach = value; break; case kwsysProcess_Option_Detach: cp->OptionDetach = value; break;
case kwsysProcess_Option_HideWindow: cp->HideWindow = value; break; case kwsysProcess_Option_HideWindow: cp->HideWindow = value; break;
case kwsysProcess_Option_MergeOutput: cp->MergeOutput = value; break;
case kwsysProcess_Option_Verbatim: cp->Verbatim = value; break; case kwsysProcess_Option_Verbatim: cp->Verbatim = value; break;
default: break; default: break;
} }
@ -1086,7 +1091,7 @@ void kwsysProcess_Execute(kwsysProcess* cp)
nextStdInput = p[0]; nextStdInput = p[0];
si.hStdOutput = p[1]; si.hStdOutput = p[1];
} }
si.hStdError = cp->PipeChildStd[2]; si.hStdError = cp->MergeOutput? cp->PipeChildStd[1] : cp->PipeChildStd[2];
{ {
int res = kwsysProcessCreate(cp, i, &si); int res = kwsysProcessCreate(cp, i, &si);
@ -1100,7 +1105,7 @@ void kwsysProcess_Execute(kwsysProcess* cp)
{ {
kwsysProcessCleanupHandle(&si.hStdOutput); kwsysProcessCleanupHandle(&si.hStdOutput);
} }
if (si.hStdError != cp->PipeChildStd[2]) if (si.hStdError != cp->PipeChildStd[2] && !cp->MergeOutput)
{ {
kwsysProcessCleanupHandle(&si.hStdError); kwsysProcessCleanupHandle(&si.hStdError);
} }