From b23f72dedacc7c68e2840c5709eef33f8d2e868e Mon Sep 17 00:00:00 2001 From: Basile Burg Date: Wed, 25 Feb 2015 09:22:16 +0100 Subject: [PATCH] added procedure to accumulate process output in a stream --- src/ce_common.pas | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/ce_common.pas b/src/ce_common.pas index a6102353..7c830c45 100644 --- a/src/ce_common.pas +++ b/src/ce_common.pas @@ -213,6 +213,11 @@ type *) procedure processOutputToStrings(aProcess: TProcess; var aList: TStringList); + (** + * Copy available process output to a stream. + *) + procedure processOutputToStream(aProcess: TProcess; output: TMemoryStream); + (** * Terminates and frees aProcess; *) @@ -810,6 +815,25 @@ begin end; end; +procedure processOutputToStream(aProcess: TProcess; output: TMemoryStream); +var + sum, cnt: Integer; +const + buffSz = 2048; +begin + if not (poUsePipes in aProcess.Options) then + exit; + // + sum := output.Size; + while aProcess.Output.NumBytesAvailable <> 0 do begin + output.SetSize(sum + buffSz); + cnt := aProcess.Output.Read((output.Memory + sum)^, buffSz); + sum += cnt; + end; + output.SetSize(sum); + output.Position := sum; +end; + procedure killProcess(var aProcess: TAsyncProcess); begin if aProcess = nil then