X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=CollectionReader.cpp;h=4aa51732bfb5e18f45d1f45beed6fb8785b271fe;hb=88e69cc8c710fa06616219bcf347c4e9b89550d3;hp=ac33a7ef44441f06f8138c18bc8765037d19ac22;hpb=b11d90aaee4332e80c2f308113899fddebf2643a;p=ecparse.git diff --git a/CollectionReader.cpp b/CollectionReader.cpp index ac33a7e..4aa5173 100644 --- a/CollectionReader.cpp +++ b/CollectionReader.cpp @@ -23,13 +23,13 @@ bool CollectionReader::isLineBreakPresent() { } ED2KLink* CollectionReader::getNextLink() { - if (readerInput->isEOF()) { + if (readerInput->isEOF() && !growingBuffer.getRemaining()) { GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] readInput EOF reached.\n", __FILE__, __LINE__); return NULL; } if (firstLink) { identifyCollectionType(); - if (readerInput->isEOF()) { + if (readerInput->isEOF() && !growingBuffer.getRemaining()) { GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] readInput EOF reached.\n", __FILE__, __LINE__); return NULL; } @@ -39,20 +39,32 @@ ED2KLink* CollectionReader::getNextLink() { while (!readerInput->isEOF() && !isLineBreakPresent()) { readMoreBytes(); } - if (readerInput->isEOF()) { + if (readerInput->isEOF() && !growingBuffer.getRemaining()) { GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] readInput EOF reached.\n", __FILE__, __LINE__); return NULL; } size_t indexOfLineBreak = growingBuffer.indexOf('\n'); - char* line = (char*) calloc(indexOfLineBreak + 1, 1); - growingBuffer.read(line, indexOfLineBreak + 1); - line[indexOfLineBreak] = '\0'; - if (line[indexOfLineBreak - 1] == '\r') { - line[indexOfLineBreak - 1] = '\0'; + char* line; + if (indexOfLineBreak == (size_t) -1) { + GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] could not find line break, using remainder of file.\n", __FILE__, __LINE__); + indexOfLineBreak = growingBuffer.getRemaining(); + line = (char*) malloc(indexOfLineBreak + 1); + growingBuffer.read(line, indexOfLineBreak); + line[indexOfLineBreak] = '\0'; + } else { + line = (char*) malloc(indexOfLineBreak + 1); + growingBuffer.read(line, indexOfLineBreak + 1); + if (line[indexOfLineBreak] == '\n') { + line[indexOfLineBreak] = '\0'; + } + if (line[indexOfLineBreak - 1] == '\r') { + line[indexOfLineBreak - 1] = '\0'; + } } growingBuffer.cut(); GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] got line: %s\n", __FILE__, __LINE__, line); ED2KLink* ed2kLink = ED2KLink::parseED2KLink(line); + free(line); return ed2kLink; } else { }