diff options
| author | oy <Tom_Adams@web.de> | 2011-01-20 21:17:11 +0100 |
|---|---|---|
| committer | oy <Tom_Adams@web.de> | 2011-01-20 21:17:11 +0100 |
| commit | ce42fa68ffea09fb12a1439fd0cdbf6e9896f57b (patch) | |
| tree | 5993eed6ac71edafc9e24782bc4ece4e6f60f292 /src/engine | |
| parent | 7c67a1334c1cac4c8144aec86dfe516fc073e790 (diff) | |
| download | zcatch-ce42fa68ffea09fb12a1439fd0cdbf6e9896f57b.tar.gz zcatch-ce42fa68ffea09fb12a1439fd0cdbf6e9896f57b.zip | |
fixed possible CRLF line ending problem in the linereader
Diffstat (limited to 'src/engine')
| -rw-r--r-- | src/engine/shared/linereader.cpp | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/engine/shared/linereader.cpp b/src/engine/shared/linereader.cpp index 3efddb59..b705ff0e 100644 --- a/src/engine/shared/linereader.cpp +++ b/src/engine/shared/linereader.cpp @@ -4,7 +4,7 @@ void CLineReader::Init(IOHANDLE io) { - m_BufferMaxSize = 4*1024; + m_BufferMaxSize = sizeof(m_aBuffer); m_BufferSize = 0; m_BufferPos = 0; m_IO = io; @@ -13,6 +13,7 @@ void CLineReader::Init(IOHANDLE io) char *CLineReader::Get() { unsigned LineStart = m_BufferPos; + bool CRLFBreak = false; while(1) { @@ -53,10 +54,25 @@ char *CLineReader::Get() if(m_aBuffer[m_BufferPos] == '\n' || m_aBuffer[m_BufferPos] == '\r') { // line found - if(m_aBuffer[m_BufferPos] == '\r' && m_BufferPos+1 < m_BufferSize && m_aBuffer[m_BufferPos+1] == '\n') + if(m_aBuffer[m_BufferPos] == '\r') + { + if(m_BufferPos+1 >= m_BufferSize) + { + // read more to get the connected '\n' + CRLFBreak = true; + ++m_BufferPos; + continue; + } + else if(m_aBuffer[m_BufferPos+1] == '\n') + m_aBuffer[m_BufferPos++] = 0; + } + m_aBuffer[m_BufferPos++] = 0; + return &m_aBuffer[LineStart]; + } + else if(CRLFBreak) + { + if(m_aBuffer[m_BufferPos] == '\n') m_aBuffer[m_BufferPos++] = 0; - m_aBuffer[m_BufferPos] = 0; - m_BufferPos++; return &m_aBuffer[LineStart]; } else |