aboutsummaryrefslogtreecommitdiffstats
path: root/src/utility/parserInputStreamAdapter.cpp
diff options
context:
space:
mode:
authorVincent Richard <[email protected]>2012-12-13 17:37:01 +0000
committerVincent Richard <[email protected]>2012-12-13 17:37:01 +0000
commite192ce671681d7cbc175e763f0a9deab5bbfdbb2 (patch)
tree237e66e1a978b48cadb79cce2f869900110a8beb /src/utility/parserInputStreamAdapter.cpp
parentFixed seeking after EOF in input stream. (diff)
downloadvmime-e192ce671681d7cbc175e763f0a9deab5bbfdbb2.tar.gz
vmime-e192ce671681d7cbc175e763f0a9deab5bbfdbb2.zip
More robust check for EOF in input stream.
Diffstat (limited to 'src/utility/parserInputStreamAdapter.cpp')
-rw-r--r--src/utility/parserInputStreamAdapter.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/utility/parserInputStreamAdapter.cpp b/src/utility/parserInputStreamAdapter.cpp
index 7a38ef1b..779b8299 100644
--- a/src/utility/parserInputStreamAdapter.cpp
+++ b/src/utility/parserInputStreamAdapter.cpp
@@ -109,10 +109,12 @@ stream::size_type parserInputStreamAdapter::findNext
size_type findBufferLen = 0;
size_type findBufferOffset = 0;
+ bool isEOF = false;
+
// Fill in initial buffer
findBufferLen = read(findBuffer, BUFFER_SIZE * sizeof(value_type));
- for (;;)
+ while (findBufferLen != 0)
{
// Find token
for (value_type *begin = findBuffer, *end = findBuffer + findBufferLen - token.length() ;
@@ -133,15 +135,23 @@ stream::size_type parserInputStreamAdapter::findNext
memcpy(findBuffer1, findBuffer2, (BUFFER_SIZE / 2) * sizeof(value_type));
// Read more bytes
- if (findBufferLen < BUFFER_SIZE && eof())
+ if (findBufferLen < BUFFER_SIZE && (eof() || isEOF))
{
break;
}
else
{
const size_type bytesRead = read(findBuffer2, (BUFFER_SIZE / 2) * sizeof(value_type));
- findBufferLen = (BUFFER_SIZE / 2) + bytesRead;
- findBufferOffset += (BUFFER_SIZE / 2);
+
+ if (bytesRead == 0)
+ {
+ isEOF = true;
+ }
+ else
+ {
+ findBufferLen = (BUFFER_SIZE / 2) + bytesRead;
+ findBufferOffset += (BUFFER_SIZE / 2);
+ }
}
}