From b65e65ac17c9891397de4816e6c414a1270b1b9c Mon Sep 17 00:00:00 2001 From: Thomas Faber Date: Thu, 11 Aug 2011 08:50:46 +0000 Subject: [PATCH] [KMTESTS] - Handle WriteConsole's inability to write large buffers svn path=/branches/GSoC_2011/KMTestSuite/; revision=53175 --- kmtests/kmtest/kmtest.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/kmtests/kmtest/kmtest.c b/kmtests/kmtest/kmtest.c index ab2bbc47be7..e49d2617987 100644 --- a/kmtests/kmtest/kmtest.c +++ b/kmtests/kmtest/kmtest.c @@ -219,11 +219,20 @@ OutputResult( { DWORD Error = ERROR_SUCCESS; DWORD BytesWritten; + DWORD LogBufferLength; + DWORD Offset = 0; + /* WriteConsole seems to handle at most ~32kB */ + const DWORD BlockSize = 8 * 1024; KmtFinishTest(TestName); - if (!WriteConsoleA(GetStdHandle(STD_OUTPUT_HANDLE), ResultBuffer->LogBuffer, ResultBuffer->LogBufferLength, &BytesWritten, NULL)) - error(Error); + LogBufferLength = ResultBuffer->LogBufferLength; + for (Offset = 0; Offset < LogBufferLength; Offset += BlockSize) + { + DWORD Length = min(LogBufferLength - Offset, BlockSize); + if (!WriteConsoleA(GetStdHandle(STD_OUTPUT_HANDLE), ResultBuffer->LogBuffer + Offset, Length, &BytesWritten, NULL)) + error(Error); + } return Error; }