add method to ensure buffer capacity
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Sat, 5 Jul 2008 21:40:07 +0000 (23:40 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Sat, 5 Jul 2008 21:40:07 +0000 (23:40 +0200)
CollectionReader.cpp
CollectionReader.h

index 4aa5173..f58e5bc 100644 (file)
@@ -71,6 +71,18 @@ ED2KLink* CollectionReader::getNextLink() {
        return NULL;
 }
 
+bool CollectionReader::ensureBufferCapacity(size_t byteCount) {
+       while (!readerInput->isEOF() && (growingBuffer.getRemaining() < byteCount)) {
+               GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] only %d bytes remaning, need at least %d, reading more bytes.\n", __FILE__, __LINE__, growingBuffer.getRemaining(), byteCount);
+               readMoreBytes();
+       }
+       if (readerInput->isEOF() && (growingBuffer.getRemaining() < byteCount)) {
+               GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] need %d more bytes, but file is EOF.\n", __FILE__, __LINE__, (byteCount - growingBuffer.getRemaining()));
+               return false;
+       }
+       return true;
+}
+
 void CollectionReader::readMoreBytes() {
        char buffer[1024];
        size_t readBytes;
index ef71c72..72f652a 100644 (file)
@@ -19,6 +19,7 @@ public:
 private:
        void identifyCollectionType();
        bool isLineBreakPresent();
+       bool ensureBufferCapacity(size_t byteCount);
        void readMoreBytes();
 
 private: