Author: janderwald Date: Mon Oct 30 15:58:35 2006 New Revision: 24663
URL: http://svn.reactos.org/svn/reactos?rev=24663&view=rev Log: - zero complete buffer - increase buffer when reading more data than current capacity
Modified: trunk/reactos/tools/sysreg/namedpipe_reader.cpp
Modified: trunk/reactos/tools/sysreg/namedpipe_reader.cpp URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/sysreg/namedpipe_read... ============================================================================== --- trunk/reactos/tools/sysreg/namedpipe_reader.cpp (original) +++ trunk/reactos/tools/sysreg/namedpipe_reader.cpp Mon Oct 30 15:58:35 2006 @@ -15,6 +15,8 @@
namespace System_ { +#define MIN(a, b) (((a) < (b)) ? (a) : (b)) + //--------------------------------------------------------------------------------------- NamedPipeReader::NamedPipeReader() : h_Pipe(NULL) { @@ -94,14 +96,15 @@ string::size_type NamedPipeReader::readPipe(string &Buffer) { TCHAR * buf = (TCHAR *)Buffer.c_str(); - string::size_type size = Buffer.capacity(); + string::size_type buffer_size = Buffer.capacity(); + string::size_type bytes_read = 0; DWORD cbRead; BOOL fSuccess; TCHAR * localbuf; - DWORD localsize = 100; + DWORD localsize = MIN(100, buffer_size);
//#ifdef NDEBUG - memset(buf, 0x0, sizeof(TCHAR) * size); + memset(buf, 0x0, sizeof(TCHAR) * buffer_size); //#endif
#ifdef __LINUX__ @@ -115,7 +118,7 @@ { do { - ZeroMemory(localbuf, sizeof(localsize) * sizeof(TCHAR)); + ZeroMemory(localbuf, localsize * sizeof(TCHAR));
fSuccess = ReadFile( h_Pipe, @@ -127,8 +130,16 @@ if (! fSuccess && GetLastError() != ERROR_MORE_DATA) break; - _tcscat(buf, localbuf); - + if(bytes_read + cbRead > buffer_size) + { + Buffer.reserve(bytes_read + localsize * 3); + buf = (TCHAR *)Buffer.c_str(); + buffer_size = Buffer.capacity(); + } + + memcpy(&buf[bytes_read], localbuf, cbRead); + bytes_read += cbRead; + } while (!fSuccess); // repeat loop if ERROR_MORE_DATA } while (localbuf[_tcslen(localbuf)-1] != '\n');