Windows-Server-2003/sdktools/sdv/buffer.cpp

58 lines
1.3 KiB
C++

/*****************************************************************************
*
* buffer.cpp
*
* Lame buffering implementation.
*
*****************************************************************************/
#include "sdview.h"
BOOL IOBuffer::NextLine(String &str)
{
str.Reset();
do {
/*
* Drain what we can from the current buffer.
*/
int i = 0;
while (i < _cchBufUsed && _rgchBuf[i++] != TEXT('\n')) {
/* Keep looking */
}
if (i) {
/* _rgchBuf[i] is the first char not to append */
str.Append(_rgchBuf, i);
memcpy(_rgchBuf, _rgchBuf+i, _cchBufUsed - i);
_cchBufUsed -= i;
/* Stop if we copied a \n */
if (str[str.Length()-1] == TEXT('\n')) {
return TRUE;
}
}
/*
* Refill from the file until it's all gone.
*/
if (_hRead)
{
DWORD dwBytesRead;
if (!ReadFile(_hRead, _rgchBuf, _cchBuf, &dwBytesRead, NULL)) {
_hRead = NULL;
}
#ifdef UNICODE
#error Need to convert from ANSI to UNICODE here
#endif
_cchBufUsed = dwBytesRead;
}
} while (_hRead);
return FALSE;
}