From d0d230cc2d342eb5cfe40db1e66b2c180e3242dc Mon Sep 17 00:00:00 2001 From: Basile Burg Date: Sat, 15 Nov 2014 18:37:28 +0100 Subject: [PATCH] fix messages from processes sometime cut --- src/ce_common.pas | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/ce_common.pas b/src/ce_common.pas index 44379bad..a58ddc02 100644 --- a/src/ce_common.pas +++ b/src/ce_common.pas @@ -698,8 +698,7 @@ var str: TMemoryStream; sum: Integer; cnt: Integer; -const - buffSz = 1024; + buffSz: Integer; begin if not (poUsePipes in aProcess.Options) then exit; @@ -707,10 +706,21 @@ begin sum := 0; str := TMemoryStream.Create; try - while aProcess.Output.NumBytesAvailable <> 0 do begin - str.Size := str.Size + buffSz; - cnt := aProcess.Output.Read((str.Memory + sum)^, buffSz); - sum += cnt; + buffSz := aProcess.PipeBufferSize; + // temp fix: messages are cut if the TAsyncProcess version is used on simple TProcess. + if aProcess is TAsyncProcess then begin + while aProcess.Output.NumBytesAvailable <> 0 do begin + str.Size := sum + buffSz; + cnt := aProcess.Output.Read((str.Memory + sum)^, buffSz); + sum += cnt; + end; + end else begin + repeat + str.Size := sum + buffSz; + cnt := aProcess.Output.Read((str.Memory + sum)^, buffSz); + sum += cnt; + until + cnt = 0; end; str.Size := sum; aList.LoadFromStream(str);